有以下问题
有 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~~