这篇文章讲述的是算法初级部分的换分币问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
将5元的人民币换成1元、5角、和1角的硬币,共多少种不同的兑换方法。
算法分析
假设可以兑换1元硬币oneYuan个,5角硬币fiveJiao个,1角硬币oneJiao个
则满足以下条件:
oneYuan*10+fiveJiao*5+oneJiao*1=50 (统一计算单位为分)
确定取值范围:
oneYuan:0~5
fiveJiao:0~10
oneJiao:0~50
使用两层for循环穷举出每一种情况并判断那种满足即可
代码实现
package mathematics;
public class Q11_ExchangeOfCurrency {
/**
* 问题描述:将5元的人民币换成1元、5角、和1角的硬币,共多少种不同的兑换方法。
*
* 算法分析:假设可以兑换1元硬币oneYuan个,5角硬币fiveJiao个,1角硬币oneJiao个
* 则满足以下条件:
* oneYuan*10+fiveJiao*5+oneJiao*1=50 (统一计算单位为分)
* 确定取值范围:
* oneYuan:0~5
* fiveJiao:0~10
* oneJiao:0~50
* 使用两层for循环穷举出每一种情况并判断那种满足即可
*/
public static void main(String[] args) {
/*初始化1元,5角,1角个数*/
int oneYuan , fiveJiao , oneJiao ;
int num = 0 ;
System.out.println("满足情况的结果有:");
/*穷举每一种情况*/
for(oneYuan=0 ; oneYuan<=5 ;oneYuan++)
for(fiveJiao=0 ; fiveJiao<=(50-oneYuan*10)/5 ; fiveJiao++){
oneJiao = 50-oneYuan*10-fiveJiao*5 ;
/*判定是否满足条件*/
if(oneYuan*10+fiveJiao*5+oneJiao*1==50){
/*输出满足条件的结果*/
System.out.printf("一元:%-2d 五角:%-2d 一角:%-2d ",oneYuan,fiveJiao,oneJiao);
num++ ;
if(num%5==0)
System.out.println();
}
}
System.out.println();
System.out.println("共"+num+"种");
}
}
样例输出
满足情况的结果有:
一元:0 五角:0 一角:50 一元:0 五角:1 一角:45 一元:0 五角:2 一角:40 一元:0 五角:3 一角:35 一元:0 五角:4 一角:30
一元:0 五角:5 一角:25 一元:0 五角:6 一角:20 一元:0 五角:7 一角:15 一元:0 五角:8 一角:10 一元:0 五角:9 一角:5
一元:0 五角:10 一角:0 一元:1 五角:0 一角:40 一元:1 五角:1 一角:35 一元:1 五角:2 一角:30 一元:1 五角:3 一角:25
一元:1 五角:4 一角:20 一元:1 五角:5 一角:15 一元:1 五角:6 一角:10 一元:1 五角:7 一角:5 一元:1 五角:8 一角:0
一元:2 五角:0 一角:30 一元:2 五角:1 一角:25 一元:2 五角:2 一角:20 一元:2 五角:3 一角:15 一元:2 五角:4 一角:10
一元:2 五角:5 一角:5 一元:2 五角:6 一角:0 一元:3 五角:0 一角:20 一元:3 五角:1 一角:15 一元:3 五角:2 一角:10
一元:3 五角:3 一角:5 一元:3 五角:4 一角:0 一元:4 五角:0 一角:10 一元:4 五角:1 一角:5 一元:4 五角:2 一角:0
一元:5 五角:0 一角:0
共36种