C语言编程题将100元钱兑换成1元,5元和10元的零钱,请用穷举法编程计算共有几种兑换方法,每种方法各兑换多少张纸币。

这两天正在做C语言的练习题,突然看到了这个问题,本来已经做完了想上网搜一下竟然发现没有几个很好答案,那就我来写一个吧。(主要是比我猛的人也不屑于写这个了,狗头)、

思路解析:

  1. 首先要区分的一个概念就是钱数和张数,这个问题我只能说我们心里都明白可是不好用计算机来表达。既然这样那就多设几个变量便于看清楚。
  2. 理清思路100元换成1元,5元,10元的零钱,最容易换的就是10元。因为10是1,5,10的最小公倍数。这么做总会为后边较小的数留出空间来计算其他值。
  3. 用100去除(我分不清除和除以总之就是100/10)这样就能得到最多换10张10元,0张1元和5元。
  4. 所以最多10张,如果9张10元呢,这时候定义变量1<=i<=10 循环就可以了
  5. 设开始第1次循环后换出来了1个10元,剩余90元
  6. 这90元再去用于除5(90/5)最多会有18张5元。所以最多18张,如果是17张呢,再定义变量1<=j<=18
  7. 设开始嵌套循环的第1次循环换出来了1个五元
  8. 那么剩下的就不用说了嘛,五元十元的都换完了,剩下的一元就不需要这样分析了,因为一元的价值量等于其数量。即剩下的全是一元

上代码

void exchange()
{
	const int a = 100;
	int m_10 = 0, m_5 = 0, m_1 = 0;  //金额
	int n_10 = 0, n_5 = 0, n_1 = 0; //个数
	int sum = 0;
	printf("可交换数量如下(单位:张)\n");
	printf("\t1元\t5元\t10元\n");
	for (n_10 = 1;n_10 <= 10; n_10++)
	{
		m_10 = a - 10 * n_10;
		for (n_5 = 1; n_5 <= m_10 /5; n_5++)
		{
			m_5 = m_10 - 5 * n_5;
			{
				m_1 = m_5 * 1;
				n_1 = m_1;
			}
			
			if(n_1 != 0)
			{
				sum++;
				printf("\t%d\t%d\t%d\n", n_1, n_5, n_10);
			}
		}
	}
	printf("共%d种\n", sum);
}


说明一下:

  • 复合语句m_1那两行纯属是为了增加可读性,完全可以直接赋值而且其中的金额变量也完全可以去掉直接替换成相应的赋值语句放在变量名处即可。
  • if条件是为了保证每个面额的纸币都大于0,没有这个要求可以不加。另外可能有其他要求,按照要求调整语句即可。
  • 另外,一开始容易犯的错误就是第二次循环的条件没有考虑到已经换出了10元的面额通常会直接写成1<=j<=20。在我第一次跑程序的时候 也是这么搞得。。。后来1元出现了负数就回头想了一下。
  • 晚安!
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值