请在两个□内填入相同的数字使得等式成立:□3×6528=3□×8256。
这是一个很简单的小学三年级的奥数题目,或许你可以通过口算轻而易举地解决。没有关系,我们这里只是做一个引子来看如何通过编程解决。□内所填的数是1~9的某一个数,最简单的方法就是一个一个地去试。我们的计算机最擅长的就是“不厌其烦”地重复做同一件事情,而且运行速度还非常快,即使你现在用的是市面上最坏最坏的计算机,它1秒钟仍然可以计算100 000 000次以上。好了,言归正传,还是来看看如何通过编程解决吧。我们只需写一个循环,让变量i从1到9循环就好了,然后每次循环只需判断一下当前的i是否符合这个等式的条件,如果符合就输出其值。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
for(i=1; i<=9; i++)
{
if( (i*10+3)*6528 == (30+i)*8256 )
printf("%d", i);
}
system("pause");
return 0;
}
再来看一个稍微复杂的:
在上面的算式中,A、B、C、D、E分别代表5个互不相同的整数, 请问A、B、C、D、E分别为多少时算式才会成立?请输出这个算式。
分析完题目后,你会发现这个题目和上面的题目是差不多的,只要 ABCD×E的积等于DCBA成立就输出。A、B、C、D、E的取值范围只可能是0~9。因此这里可以用5个嵌套循环来解决这个问题。代码如下:
for(a=0; a<=9; a++)
{
for(b=0; b<=9; b++)
{
for(c=0; c<=9; c++)
{
for(d=0; d<=9; d++)
{
for(e=0; e<=9; e++)
{
//进行判断
}
}
}
}
}
接下来就是判断,首先A、B、C、D、E这5个数要互不相等:
if( a! =b && a! =c && a! =d && a! =e
&& b! =c && b! =d && b! =e
&& c! =d && c! =e
&& d! =e )
{
//有待进一步判断
}
再进一步判断ABCD×E的积等于DCBA是否成立,如果成立则输出:
if( (a*1000+b*100+c*10+d)*e == (d*1000+c*100+b*10+a) )
{
printf("%d%d%d%d\n", a, b, c, d);
printf("* %d\n", e);
printf("-----\n");
printf("%d%d%d%d\n", d, c, b, a);
}
好了,下面是完整的代码,赶快试一试吧。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c, d, e;
for(a=0; a<=9; a++)
{
for(b=0; b<=9; b++)
{
for(c=0; c<=9; c++)
{
for(d=0; d<=9; d++)
{
for(e=0; e<=9; e++)
{
if( a! =b && a! =c && a! =d && a! =e
&& b! =c && b! =d && b! =e
&& c! =d && c! =e
&& d! =e )
{
if( (a*1000+b*100+c*10+d)*e ==
(d*1000+c*100+b*10+a) )
{
printf("%d%d%d%d\n", a, b, c, d);
printf("* %d\n", e);
printf("----\n");
printf("%d%d%d%d\n", d, c, b, a);
}
}
}
}
}
}
}
system("pause");
return 0;
}
运行结果如图下方所示:
更进一步,动手试一试
用1~6这6个自然数组成一个三角形,并让这个三角形三条边上数字之和相等。例如,如图5-2所示的三角形中,三条边的值之和分别为:5+3+4、4+2+6、5+1+6,都等于12。那么现在请你输出所有的可能。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c,d,e,f;
for(a=1; a<=6; a++)
{
for(b=1; b<=6; b++)
{
for(c=1; c<=6; c++)
{
for(d=1; d<=6; d++)
{
for(e=1; e<=6; e++)
{
for(f=1;f<=6;f++)
{
if( a!=b && a!=c && a!=d && a!=e && a!=f
&& b!=c && b!=d && b!=e && b!=f
&& c!=d && c!=e && c!=f
&& d!=e && d!=f
&& e!=f )
{
if(a+b+d==12 && d+e+f==12 && a+c+f==12)
{
printf(" %d\n", a);
printf(" %d %d\n", b,c);
printf("%d %d %d\n\n",d,e,f);
}
//else
//printf ("no\n");
}
}
}
}
}
}
}
system("pause");
return 0;
}
运行结果: