卖电影票问题(乘车问题)

原题描述:

乘车问题(买电影票问题)

     公交车为通票5角。现有持5角硬币和1元硬币的乘客各n个人。

     要保证1元的乘客都能得以找钱,可有多少种上车的顺序?

     例如n=3时,可有

     555111、551511、551151、515511、515151。共5种顺序。


#include<iostream>
using namespace std;
int countt=0;
int t[100];
//h5,h1分别表示售货员手上5毛和1块的张数,leaved5和leaved1分别表示未上车的乘客
void onsail(int  h5,int h1,int leaved5,int leaved1,int i)
{
 if(leaved1>=0&&leaved5>=0&&h5>=h1)// 保证进入递归的大条件是未上的乘客》=0和售货员手上的5毛大于1块的张数
 {
       if(leaved5!=0||leaved1!=0)//保证未上车的人数>0
  {
    t[i]=5;
      onsail(h5+1,h1,leaved5-1,leaved1,i+1);
       t[i]=1;
      onsail(h5,h1+1,leaved5,leaved1-1,i+1);
  }
        //这时所有乘客都上了车,且是符合题目要求的
  //if(leaved5==0&&leaved1==0)此时已经满足了所有乘客都上了车,此条件多余
 else
 {
       countt++;
       for(int j=0;j<i;j++)
     cout<<t[j];
        cout<<endl;
 }
 }
}
int main()
{
   int n;
   cin>>n;
   onsail(0,0,n,n,0);
   cout<<countt;
}
posted @ 2013-12-22 00:52  it__橘子  阅读(245)  评论(0)    收藏  举报