ACM 超级楼梯 发工资

超级楼梯
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
Sample Input
2
2
3 
Sample Output
1
2 
代码:
public class ChaoJiLouTi {

    public static void main(String[] args) {
       System.out.println(method2(4));
    }
    public static int method2(int n){
        //限定n的取值范围
        if(n<1 || n>40){
            return -1; 
        }
        int count;
         if (n == 0 || n == 1) {  //假定站在第一层台阶
             count = 0;
         } else if (n == 2) {
             count = 1;
         } else if (n == 3) {
             count = 2;
         } else {  //递归调用
             count = method2(n - 1) + method2(n - 2);
         }
        return count;
    }
}
代码2:
public class Exam1207_2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //6级楼梯5步
        //1 1 1 1 1
        //2 1 1 1(1 2 1 1 - 1 1 2 1 - 1 1 1 2)
        //2 2 1(2 1 2 - 1 2 2 )
        int m=6;
        m--; //m=5
        int sum=1;
        
        int hei=0;
        int bai=0;
        for(int i=1;i<=m/2;i++){
            //m个黑球和n个白球,一共有多少种取法
            hei=i;
            bai=m-i*2;
            sum+=method(hei,bai); //对于i个2,返回其组合的个数
        }
        System.out.println(sum);
    }
    
    //对于m个黑球和n个白球,一共有多少种取法
    public static int method(int m,int n) {
        n=m+n;
        return jieCheng(n)/(jieCheng(m)*jieCheng(n-m));
    }
    
    //对于传入的任意x,返回x的阶乘
    public static int jieCheng(int x){
        int sum=1;
        for(int i=1;i<=x;i++){
            sum*=i;
        }
        return sum;
    }
}
发工资
Problem Description
作为企业的老板,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵
但是对于财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡最近就在考虑一个问题:如果每个员工的工资额都知道,最少需要准备多少张人民币,才能在给每位员工发工资的时候都不用找零呢?
这里假设员工的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
Input
输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示员工的人数,然后是n个员工的工资。
n=0表示输入的结束,不做处理。
Output
对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。
Sample Input
 3
1 2 3
0 
Sample Output
 4 
public class Exam1207_5 {

    public static void main(String[] args) {
    
        int[] ins=new int[]{1,2,3}; //1 2 5
        
        int sum=0;
        for(int i=0;i<ins.length;i++){
            sum+=method(ins[i]);
        }
        System.out.println(sum);
    }
    private static int method(int x) {
        //318(3 100 | 1 10 | 1 5 | 1 2 | 1 1)
        int count=0;
        if(x>=100){
            while(x>=100){
                x-=100;
                count++;
            }
        }
        if(x>=50){
            while(x>=50){
                x-=50;
                count++;
            }
        }
        if(x>=10){
            while(x>=10){
                x-=10;
                count++;
            }
        }
        if(x>=5){
            while(x>=5){
                x-=5;
                count++;
            }
        }
        if(x>=2){
            while(x>=2){
                x-=2;
                count++;
            }
        }
        if(x>=1){
            while(x>=1){
                x-=1;
                count++;
            }
        }
        return count;
    }
}

 

posted @ 2017-12-10 22:37  计算机语言  阅读(502)  评论(0编辑  收藏  举报