page contents

换分币问题 - C语言编程

问题描述: 将5元的人民币兑换成1元、五角和一角的硬币,总共有多少中兑换方法。

换分币问题 - 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、程序流程图:

attachments-2021-05-bZ41lYdE609b856ce8de5.png

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) ;

}

  • 发表于 2021-05-12 15:38
  • 阅读 ( 1206 )
  • 分类:C/C++开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
文双
文双

NB

71 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1658 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章