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