用C++解越南小学三年级数学题

    据悉题目来自越南保禄小学三年班,学生需要由上至下、从左到右的顺序,填入1至9的数字,可重复填写,并按先乘除后加减的运算法则,完成整条算式。

技术分享


    河内一家人才培育中心的副总监陈方表示,题目只需用到基本运算技巧,他邀请一些成年人挑战,包括拥有经济学博士学位的人,不过全部人都答不出来。


人力很难办到的事情,用计算机来解决就简单多了。我们使用C++程序设计语言,采用穷举法来计算这道题目。穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。


在原题所列空框内,依次填列a, b, c, d, e, f, g, h, i的未知数,如下图所示:

技术分享

根据上图列式可得:a+13*b/c+d+12*e-f-11+g*h/i-10 = 66

进一步化简上式得:a+13*b/c+d+12*e-f+g*h/i = 87

已知a, b, c, d, e, f, g, h, i的取值区间为[1,9],所以穷举计算有9*9*9*9*9*9*9*9*9=9^9=387420489种判定,我们要从总判定数中筛选出符合等式成立的结果。由未知数个数可确定循环为9层。每层从1递增至9,步长为1。这样我们可以很容易写出源码。


在Windows 7 64位简体中文专业版和C++ Builder 2010集成开发环境下的控制台程序源码:

//---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <iostream>

using namespace std;
//---------------------------------------------------------------------------

#pragma argsused

int _tmain(int argc, _TCHAR* argv[])
{
	float a, b, c, d, e, f, g, h, i;  //设置9个未知数
	int counter = 0;       //计数器
	const int MY_MAX = 10;  //1-9范围内的数字
	for(a = 1.0; a < MY_MAX; a=a+1)
	for(b = 1.0; b < MY_MAX; b=b+1)
	for(c = 1.0; c < MY_MAX; c=c+1)
	for(d = 1.0; d < MY_MAX; d=d+1)
	for(e = 1.0; e < MY_MAX; e=e+1)
	for(f = 1.0; f < MY_MAX; f=f+1)
	for(g = 1.0; g < MY_MAX; g=g+1)
	for(h = 1.0; h < MY_MAX; h=h+1)
	for(i = 1.0; i < MY_MAX; i=i+1)
	{
		// a+13*b/c+d+12*e-f-11+g*h/i-10 == 66.0
		if (a+13*b/c+d+12*e-f+g*h/i == 87.0)   //计算方程式的值,判断是否是一组解
		{
		     cout << "[" << ++counter << "]\t";
			 cout << "a=" << a << "; ";
			 cout << "b=" << b << "; ";
			 cout << "c=" << c << "; ";
			 cout << "d=" << d << "; ";
			 cout << "e=" << e << "; ";
			 cout << "f=" << f << "; ";
			 cout << "g=" << g << "; ";
			 cout << "h=" << h << "; ";
			 cout << "i=" << i << ";\n";
		}
	}
	system("PAUSE");
	return 0;
}
//---------------------------------------------------------------------------

技术分享


程序运行部分结果如下图:

技术分享


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。