卖电影票问题(乘车问题)
原题描述:
乘车问题(买电影票问题)
公交车为通票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;
}

浙公网安备 33010602011771号