换分币问题 - C语言编程
1、问题描述:
将5元的人民币兑换成1元、五角和一角的硬币,总共有多少中兑换方法
2、问题分析:
根据问题的描述,可以把问题抽象成一个不定方程
设变量x、y和z分别代表兑换的1元、5角和1角的硬币所具有的钱数(角),
则由题目的要求,可得到如下的方程:
x+y+z=50
其中,x为兑换的1元硬币钱数,其可能的取值为{0,10,20,30,40,50},
y为兑换的5角硬币钱数,其可能的取值为{0,5,10,15,20,25,30,35,40.,45,50},
z为兑换的1角硬币钱数,其可能的取值为{0,1...0}。
3、算法设计:
在问题分析中,我们得到了一个不定方程,显然该不定方程会有多组解。
根据题意可知x、y和z的可能取值,
将它们所有可能取值的组合代入方程中,能使该方程成立的那些解即为该问题的解。
为实现该功能,需要使用3个嵌套的for循环语句。
4、程序流程图:
5、代码实现如下:
#include <stdio.h>
main()
{
int x, y, z, count = 1;
printf("可能的兑换方法如下: \n");
for (x = 0; x <= 50; x += 10)
/*x 为1元硬币钱数,其取值为0,10, 20,30,40,50*/
for (y = 0; y <= 50 - x; y += 5)
/*y为5角硬币钱数,其取值为0,5,10,15,20,25,30,35,40,45,50*/
for (z = 0; z <= 50 - x - y; z++)
/*z为1角硬币钱数,其取值为0,1,...50*/
if (x + y + z == 50)
printf(count % 3 ? "%d: 10 * %d + 5 * %d + 1 * %d\t" : "%d: 10 * %d + 5 * %d + 1 * %d\n" , count++,x/10,y/5,z) ;
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!