多谢大神指教~
------解决方案--------------------
《计算方法》。
一般还会有个要求,
比如:只要凑一个一元就行。
比如:求所有能够凑成一元的情况。
比如:使用的硬币数最少。
比如:使用的硬币数最多。
------解决方案--------------------
可以凑成的情况,简单理解为5*?+2*?+1*?=10
public class test {
public static void main(String[] args) {
for (int a = 0; a <=2; a++) {
for (int b = 0; b <=5; b++) {
int c=10-a*5-b*2;
if(c>0&&a*5+b*2+c*1==10)
System.out.println(a+"*5+"+b+"*2+"+c+"*1=10");
}
}
}
}
------解决方案--------------------
------解决方案--------------------
- Java code
int k = 0 ; //1出现的次数 for (int i = 0; i <= 2 ; i++){ //5最多出现两次 for (int j = 0; j <= 5; j++){//2最多出现五次 k = 10 - i * 2 - j * 2 ; if (k >= 0){ System.out.println("5出现 "+ i + " 次,2出现 " + j + "次,1出现 " + k +"次"); }else { //如果k小于0,则之后的都不满足,所以跳出内层循环,即2出现的那层循环j break ; } } }
------解决方案--------------------
1元=100分,为什么楼上的都写10呢?
------解决方案--------------------
如果金币种类多的话可以用回溯+剪枝
------解决方案--------------------
错了,是《运筹学》中的线性规划问题吧 ?
按理说,应该是规定各种面值的硬币,分别多少枚。求凑成1元所用个数最少的情况。
------解决方案--------------------
想复杂了。最简单的,穷举法。
- Java code
public static void main(String[] args) { int a=20; int b=50; int c=100; final int total = 100; for(int i=1;i<=a;i++){ for(int j=1;j<=b;j++){ for(int k=1;k<=c;k++){ if(total == i*5+j*2+k){ System.out.println("5x"+i+" + 2x"+j+" + 1x"+k); } } } } }