如题
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
先提取题目所给消息:
1.5个在1~9之间的不同数字。abcde
2.abcde=adbce。(这里可以看出,d就是中间塞着的一个数字)
3.答案是偶数
直接考虑穷举法
代码如下:
#include <stdio.h>
int main()
{
int a,b,c,d,e;//先定义五个数,这五个数都是1~9的
int i,j,k;//备用
//这个题可以用穷举法来计算
k = 0;
for(a=1;a<=9;a++)//a是属于1~9的数
{
for(b=1;b<=9;b++)
{
if(a!=b)//a不等于b才有接下来的故事
{
for(c=1;c<=9;c++)
{
if(c!=a&&c!=b)//c及既不等于a,也不等于b
{
for(d=1;d<=9;d++)
{
if(d!=a&&d!=b&&d!=c)//以下与上面雷同(doge
{
for(e=1;e<=9;e++)
{
if(e!=a&&e!=b&&e!=c&&e!=d)
{
i = (a*10+b)*(c*100+d*10+e);//这就是题目上的关键点了,
j = (a*100+d*10+b)*(c*10+e);//可以看做是d就是在中间变动的个数字
if(i==j)//如果i==j的话,那么统计的数字就会多一个
{
k++;
}
}
}
}
}
}
}
}
}
}
printf("%d",k);//最后把统计的数字返回,打出就可以了
}
运行截图如下: