有 20 枚硬币,可能包括 4 种类型:1 元、5 角、1 角和 5 分。已知 20 枚硬币的总价值为 10 元,求各种硬币的数量。

有以下问题

有 20 枚硬币,可能包括 4 种类型:1 元、5 角、1 角和 5 分。已知 20 枚硬币的总价值为 10 元,求各种硬币的数量。

首先我们先来分析一下,每种硬币的情况,1 元最多 10 枚、5 角最多 20 枚、1 角最多20 枚、5 分最多 20 枚。

通过以上的分析,我们可以通过穷举法来实现这个问题,可能有人问,穷举法是什么呢?

穷举法就是列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的全部解答。
这里如果以元为单位,则 5 角、1 角、5 分会化成浮点型数据,容易计算出错。可以将 1元、5 角、1 角、5 分变成 100 分、50 分、10 分和 5 分,从而全部采用整型数据处理

C/C++代码

#include <iostream>
#include <Windows.h>
#include <string>

using namespace std;

/*
有 20 枚硬币,可能包括 4 种类型:1 元、5 角、1 角和 5 分。已知 20 枚硬币的总价值为 10 元,求各种硬币的数量。
1 元最多 10 枚、5 角最多 20 枚、1 角最多20 枚、5 分最多 20 枚。
*/

int main(void) {
	string line(50, '-');

	int a100 = 0;	//1元的硬币数量
	int a50 = 0;	//5角的硬币数量
	int a10 = 0;	//1角的硬币数量
	int a5 = 0;		//5分的硬币数量
	int ret = 0;	//记录共有几种方案

	cout << line << endl;

	for (a100 = 0; a100 <= 10; a100++) {
		for (a50 = 0; a50 <= 20; a50++) {
			for (a10 = 0; a10 <= 20; a10++) {
				for (a5 = 0; a5 <= 20; a5++) {
					if (a100 * 100 + a50 * 50 + a10 * 10 + a5 * 5 == 1000 && (a100 + a50 + a10 + a5) == 20) {
						cout << "1元的数量:" << a100 << "  5角的数量:" << a50 
							<< "  1角的数量:" << a10 << "  5分的数量:" << a5  << endl;
						ret++;
						cout << line << endl;
					}
				}
			}
		}
	}

	cout << "共有" << ret << "种方案" << endl;

	cout << line << endl;

	system("pause");
	return 0;
}

运行以上代码,便可以得到结果

在这里插入图片描述
用穷举法解决问题。

(1) 问题所涉及的情况:问题所涉及的情况有哪些,情况的种数必须可以确定。把它描述出来。应用穷举时对问题所涉及的有限种情形必须一一列举,既不能重复,也不能遗漏。重复列举直接引发增解,影响解的准确性;而列举的遗漏可能导致问题解的遗漏。
(2) 答案需要满足的条件:分析出来的这些情况,需要满足什么条件,才成为问题的答案。把这些条件描述出来。

喜欢的可以点点赞哦QAQ~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随你而归的云彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值