看看这个应该能帮到你的:package addvalue;import java.util.*;public class Suanfa { private static final int[] e = {100,50,20,10,5,2,1};
/** * 规范版 */ public static int fun(int M){ int n = 0; //记录组合数 for(int i : e){ if(M >= i){ //i为选取值的最大值,从2分开始设计算法 int a = M/i; //M是i的a倍,a至少是1 if(M%i == 0) n += 1+fun(i-1)*(a-1); //1代表采用a个值i的组合有一种 else n += fun(M%i)+fun(i-1)*(a-1);//fun(M%i)代表采用a个值i的组合有fun(M%i)种 } } return n; }
public static void main(String[] args) { Scanner s = new Scanner(System.in); for(int M=0;true;M=s.nextInt()) System.out.println( "\t组合数为(fun(int M)) : "+fun(M)+"\n" +"\t组合数为 ($fun(int M)): "+$fun(M) ); }
/** * 精简版 **/ public static int $fun(int M){ int n = 0; //记录组合数 for(int i : e) if(M >= i) n += fun(i-1)*(M/i-1) + (M%i==0 ?1 :fun(M%i)); return n; } }
看看这个应该能帮到你的:package addvalue;import java.util.*;public class Suanfa {
private static final int[] e = {100,50,20,10,5,2,1};
/**
* 规范版
*/
public static int fun(int M){
int n = 0; //记录组合数
for(int i : e){
if(M >= i){ //i为选取值的最大值,从2分开始设计算法
int a = M/i; //M是i的a倍,a至少是1
if(M%i == 0)
n += 1+fun(i-1)*(a-1); //1代表采用a个值i的组合有一种
else
n += fun(M%i)+fun(i-1)*(a-1);//fun(M%i)代表采用a个值i的组合有fun(M%i)种
}
}
return n;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
for(int M=0;true;M=s.nextInt())
System.out.println(
"\t组合数为(fun(int M)) : "+fun(M)+"\n"
+"\t组合数为 ($fun(int M)): "+$fun(M)
);
}
/**
* 精简版
**/
public static int $fun(int M){
int n = 0; //记录组合数
for(int i : e)
if(M >= i)
n += fun(i-1)*(M/i-1) + (M%i==0 ?1 :fun(M%i));
return n;
}
}