原题如下图所示,是灰狼博客辅导孩子的时候所遇到的问题,问了好几个AI都没有得到满意的答案。
解体思路:
题目不难,但是人工计算数据量太大,借用运行快速强大的电脑来帮助我们是一个比较好的方法。
由于这些数字在题目里都是整数,而题目里面出现了分数计算,即使是分数,得到的结果也应该是整数,为了避免在计算过程中出现小数,我们把能换算的钱数扩大100倍,即以分为单位来解决,这样就不会出现小数。(即根据题意,所有变量都定义为int类型。)
代码如下:
#include <iostream>
using namespace std;
//思路,由于都是整数,题目用到了分数,所以把数据扩大100倍,以分为单位来计算。
int main() {
//定义变量分别表示1分,2分,5分,1角,元
int f1, f2, f5, j1, y;
//遍历51-99元,这里即5100分,到10000分,每次增加1元
for (y = 5100; y < 10000; y = y + 100) {
//根据题目隐含条件,1分都是以125的增速来遍历,减少循环次数。
for(f1 = 125; f1 < 10000; f1 = f1 + 125) {
//根据题目条件分解计算各变量的值
f2 = f1 / 5 * 3;
f5 = f2 / 5 * 3;
j1 = f5 / 5 * 3 - 7;
//如果能兑换,则输出
if(f1 + f2 * 2 + f5 * 5 + j1 * 10 == y){
cout << f1 << " " << f2 << " " << f5 << " " << j1 << endl;
cout << y << endl;
}
}
}
return 0;
}
运行结果如下图(如果人性化一点,可以把输出结果除以100再输出。):
感慨一下,果然是重点小学,出的题目非同凡响。