一个算法问题,请DX指教。盛况空前的足球赛即将举行。球赛门票售票处排起了球迷购票长龙。
 按售票处规定,每位购票者限购一张门票,且每张票售价50元。
在排成长龙的球迷中有m个人手持面值50元的钱币,
另有n 个人手持面值100元的钱币。假设售票处在开始受票时没有零钱。
试问这m+n 个球迷有多少种排队方式可使售票处不致出现找不出钱的尴尬局面.

解决方案 »

  1.   


    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;
    }
    }
      

  2.   

    这里还有很多实现的办法,我也是照这个写的!
    http://topic.csdn.net/t/20030913/10/2255126.html