一个算法问题,请DX指教。盛况空前的足球赛即将举行。球赛门票售票处排起了球迷购票长龙。
按售票处规定,每位购票者限购一张门票,且每张票售价50元。
在排成长龙的球迷中有m个人手持面值50元的钱币,
另有n 个人手持面值100元的钱币。假设售票处在开始受票时没有零钱。
试问这m+n 个球迷有多少种排队方式可使售票处不致出现找不出钱的尴尬局面.
按售票处规定,每位购票者限购一张门票,且每张票售价50元。
在排成长龙的球迷中有m个人手持面值50元的钱币,
另有n 个人手持面值100元的钱币。假设售票处在开始受票时没有零钱。
试问这m+n 个球迷有多少种排队方式可使售票处不致出现找不出钱的尴尬局面.
public class Test { //售票员手中的50元钱个数
static int count = 0;
/**
* @param args
*/
public static void main(String[] args) {
//50元钱的人数
int m = Integer.parseInt(args[1]);
//100元钱的人数
int n = Integer.parseInt(args[0]);
//有多少个50元的人,100元的人在队列中。
int sum50=1,sum100=0;
if(m>n){
System.out.println("error:m>n");
return;
}
pai(m,n,sum50,sum100);
System.out.println(count);
}
static void pai(int m,int n,int sum50,int sum100){
//从队列的第一个人开始考察,只要保证前面i个人(0<i<=n)中有50元钱的球迷数量不少于 //有100元钱球迷数量即可,
//sum50代表当前队列已有多少个手持50元的球迷,sum100依此类推
if(sum50 == m || sum100 == n){
count++;
return;
}
//50元的人多余100元的人,下一个位置可以是100元的人
if(sum50>sum100)
pai(m,n,sum50,sum100+1);
//随时都可以是50元的人
pai(m,n,sum50+1,sum100);
return;
}
}
http://topic.csdn.net/t/20030913/10/2255126.html