先说题目: 以此为例来讨论一下。
ABCDE
x A
————
EEEEEE
大概就是这个样子了,ABCDE各代表一个0-9的数字。要求就是ABCDE与A相乘的积等于EEEEEE这个6位数。我想都应该能看得懂。
我想不出来有别的好的算法,利用计算机的高速计算能力,下面是一个枚举算法的C语言实现。
#include <stdio.h>
int main()
{
int i1,i2,i3,i4,i5;
long multi,result;
for (i1=1;i1<=9;i1++)
{
for (i2=0;i2<=9;i2++)
{
for (i3=0;i3<=9;i3++)
{
for (i4=0;i4<=9;i4++)
{
for(i5=1;i5<=9;i5++)
{
multi = i1*10000+i2*1000+i3*100+i4*10+i5;
result = i5*100000+i5*10000+i5*1000+i5*100+i5*10+i5;
if (multi*i1 == result)
{
printf("\n%5d%2d%2d%2d%2d\n",i1,i2,i3,i4,i5);
printf("X%12d\n",i1);
printf("_____________\n");
printf("%3d%2d%2d%2d%2d%2d\n",i5,i5,i5,i5,i5,i5);
}
}
}
}
}
}
getchar();
return 0;
}
得到了一个结果79365*7,但是我觉得这个算法不够完美。因为我觉得在计算之前我们根本不知道能够得到什么样的结果,比如说结果很多或者根本无解呢。按照题目的要求ABCDE是不相等的,所以我觉得应该在打印结果之前加一组判断,就是说在本程序唯一的IF那里加上判断i1-i5不相等的条件,最后再给出一个ELSE用来说明此题无解,不知道你怎么看?
ABCDE
x A
————
EEEEEE
大概就是这个样子了,ABCDE各代表一个0-9的数字。要求就是ABCDE与A相乘的积等于EEEEEE这个6位数。我想都应该能看得懂。
我想不出来有别的好的算法,利用计算机的高速计算能力,下面是一个枚举算法的C语言实现。
#include <stdio.h>
int main()
{
int i1,i2,i3,i4,i5;
long multi,result;
for (i1=1;i1<=9;i1++)
{
for (i2=0;i2<=9;i2++)
{
for (i3=0;i3<=9;i3++)
{
for (i4=0;i4<=9;i4++)
{
for(i5=1;i5<=9;i5++)
{
multi = i1*10000+i2*1000+i3*100+i4*10+i5;
result = i5*100000+i5*10000+i5*1000+i5*100+i5*10+i5;
if (multi*i1 == result)
{
printf("\n%5d%2d%2d%2d%2d\n",i1,i2,i3,i4,i5);
printf("X%12d\n",i1);
printf("_____________\n");
printf("%3d%2d%2d%2d%2d%2d\n",i5,i5,i5,i5,i5,i5);
}
}
}
}
}
}
getchar();
return 0;
}
得到了一个结果79365*7,但是我觉得这个算法不够完美。因为我觉得在计算之前我们根本不知道能够得到什么样的结果,比如说结果很多或者根本无解呢。按照题目的要求ABCDE是不相等的,所以我觉得应该在打印结果之前加一组判断,就是说在本程序唯一的IF那里加上判断i1-i5不相等的条件,最后再给出一个ELSE用来说明此题无解,不知道你怎么看?