求助, 一个简单一元硬币问题! 计算一元钱硬币有多少种表达方式。例如,可以使用1元钱完成,也可以使用两个5角完成。这里可供选择的货币单位从1分到1元。编写程序计算出每一种组合方式。 谢谢啊!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 简单写了下,大多代码都是在排版...囧因为组合的可能性过多..一共4563种,所以在控制台是看不全的,如果真想看全部的,写进文件吧...import java.util.ArrayList;/* * 一元钱硬币有多少种表达方式 * 可供选择:1分,2分,5分,1角,2角,5角,1元 * 如: * 1元=1元; * 1元=5角+5角; * .... */public class Test { private static int count; public static void main(String args[]){ int max = 100;//一元 int[] cents = {100,50,20,10,5,2,1};//币值 String[] money = {"1元","5角","2角","1角","5分","2分","1分"}; ArrayList collect = new ArrayList(); collectMoney(cents, money,0, max, 0, collect); System.out.println("总共有"+count+"种搭配方法!"); } public static void collectMoney(int[] cents,String[] money,int beginIndex,int max,int result,ArrayList collect){ if(result>=max){ if(result==max){ count++; System.out.print("1元="); for(int i=0;i<collect.size();i++){ System.out.print(money[(Integer) collect.get(i)]); if(i<collect.size()-1){ System.out.print("+"); } } System.out.println(); } return; } for(int i=beginIndex;i<cents.length;i++){ int cent = cents[i]; collect.add(i); collectMoney(cents, money,i, max, result+cent, collect); collect.remove(Integer.valueOf(i)); } }}输出结果:(省略大部分)1元=1元1元=5角+5角1元=5角+2角+2角+1角1元=5角+2角+2角+5分+5分1元=5角+2角+2角+5分+2分+2分+1分1元=5角+2角+2角+5分+2分+1分+1分+1分1元=5角+2角+2角+5分+1分+1分+1分+1分+1分1元=5角+2角+2角+2分+2分+2分+2分+2分........总共有4563种搭配方法! 给个类似的你可以参考下自己改写//100元的各种零钱public class DecNum { private static int count = 0; public static void main(String[] args) { printHowToDivide(100); System.out.printf("共有 %d 种分法",count); } public static void printHowToDivide(int value) { int temp = value; int five = temp / 5; temp %= 5; int two = temp / 2; temp %= 2; int one = temp; printHowToDivide(value, five, two, one); } /* * value为需要分解的钱,num_five, num_two, num_one 分别为当前的 5 2 1块的张数 * */ private static void printHowToDivide(int value, int num_five, int num_two, int num_one) { count++; System.out.printf( " %d 块钱有如下分法: %d 张 5 元,%d 张 2 元,%d 张 1 元\n", value, num_five, num_two, num_one); if (num_one == value) return; if (num_two > 0) { printHowToDivide(value, num_five, num_two - 1, num_one + 2); } else if (num_five > 0) { printHowToDivide(value, num_five - 1, num_two + (num_one + 5) / 2, (num_one + 5) % 2); } }} Java的底层是用什么语言写的? 请手求助………… java 多线程下CPU占有率的问题 时间格式? 新手请教关于applet的helloworld简单问题 关于Jfreechart DEMO的问题! java.text.NumberFormat 格式化数值 四舍五入问题, 求解 很菜的一个问题,拜托了! 这个程序为什么会死循环 java 输入问题!! 一算法,敬请指导
import java.util.ArrayList;
/*
* 一元钱硬币有多少种表达方式
* 可供选择:1分,2分,5分,1角,2角,5角,1元
* 如:
* 1元=1元;
* 1元=5角+5角;
* ....
*/
public class Test {
private static int count;
public static void main(String args[]){
int max = 100;//一元
int[] cents = {100,50,20,10,5,2,1};//币值
String[] money = {"1元","5角","2角","1角","5分","2分","1分"};
ArrayList collect = new ArrayList();
collectMoney(cents, money,0, max, 0, collect);
System.out.println("总共有"+count+"种搭配方法!");
}
public static void collectMoney(int[] cents,String[] money,int beginIndex,int max,int result,ArrayList collect){
if(result>=max){
if(result==max){
count++;
System.out.print("1元=");
for(int i=0;i<collect.size();i++){
System.out.print(money[(Integer) collect.get(i)]);
if(i<collect.size()-1){
System.out.print("+");
}
}
System.out.println();
}
return;
}
for(int i=beginIndex;i<cents.length;i++){
int cent = cents[i];
collect.add(i);
collectMoney(cents, money,i, max, result+cent, collect);
collect.remove(Integer.valueOf(i));
}
}
}
输出结果:(省略大部分)
1元=1元
1元=5角+5角
1元=5角+2角+2角+1角
1元=5角+2角+2角+5分+5分
1元=5角+2角+2角+5分+2分+2分+1分
1元=5角+2角+2角+5分+2分+1分+1分+1分
1元=5角+2角+2角+5分+1分+1分+1分+1分+1分
1元=5角+2角+2角+2分+2分+2分+2分+2分
........
总共有4563种搭配方法!
public class DecNum { private static int count = 0;
public static void main(String[] args) {
printHowToDivide(100);
System.out.printf("共有 %d 种分法",count);
} public static void printHowToDivide(int value) {
int temp = value;
int five = temp / 5;
temp %= 5;
int two = temp / 2;
temp %= 2;
int one = temp;
printHowToDivide(value, five, two, one);
} /*
* value为需要分解的钱,num_five, num_two, num_one 分别为当前的 5 2 1块的张数
*
*/
private static void printHowToDivide(int value, int num_five, int num_two,
int num_one) {
count++;
System.out.printf(
" %d 块钱有如下分法: %d 张 5 元,%d 张 2 元,%d 张 1 元\n", value, num_five,
num_two, num_one);
if (num_one == value)
return;
if (num_two > 0) {
printHowToDivide(value, num_five, num_two - 1, num_one + 2);
} else if (num_five > 0) {
printHowToDivide(value, num_five - 1, num_two + (num_one + 5) / 2,
(num_one + 5) % 2);
}
}
}