您的位置:首页 > 其它

钱币组合题

2015-10-12 23:21 309 查看
做美团笔试,1元,5元,10元,100元组成N元,(0<=N<=10000)...不会

百度找到两篇帖子http://blog.csdn.net/v1v1wang/article/details/6872025,http://bbs.csdn.net/topics/270082525?page=2

提取出方法:

方法一:

public class MoneyTest {

//static int[] values={1,2,5,10,20,50};
static int[] values={1,5,10,50,100};
static int count=0;
public static void main(String[] args) {
split(10,0,"");
System.out.println(count);
}

public static void split(int n,int base,String result){
if(n<0) return;
if(n==0){
System.out.println(result);
count+=1;
return;
}
for(int i=base;i<values.length;i++){
split(n-values[i],i,result+values[i]+"|");
}
}

}
方法二:这种方法是最简单的,竟然忘记了,当年计算兔子和鸡的脚的题目就知道这种遍历方法,可是换成人民币竟然不会了
public class MoneyTest1 {
public static void main(String[] args) {
// 1元 5元 10元 50元 100元
int n100, n50, n10, n5, n1, count = 1;
int N = 10;// N任意改变
int max100 = N / 100;
int max50 = N / 50;
int max20 = N / 20;
int max10 = N / 10;
int max5 = N / 5;
int max1 = N;
for (n100 = 0; n100 <= max100; n100++) {
for (n50 = 0; n50 <= max50; n50++) {
for (n10 = 0; n10 <= max10; n10++) {
for (n5 = 0; n5 <= max5; n5++) {
for (n1 = 0; n1 <= max1; n1++) {
if (100 * n100 + 50 * n50 + 10 * n10 + 5 * n5 + 1
* n1 == N) {
System.out.println(count + ":" + n100 + "\t"
+ n50 + "\t" + n10 + "\t" + n5 + "\t"
+ n1 + "\t");
count++;
}
}
}
}
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: