下列乘法算式中:每个汉字代表1个数字(1~9)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。
赛软件 * 比赛 = 软件比拼
程序代码:
#include<iostream>
using namespace std;
// 赛软件 * 比赛 = 软件比拼
void fun(int a[],int n);
int main()
{
int a,b,c,d,e; //分别表示“赛”、“软”、“件”、“比”、“赛”
int arr[10]= {0}; //用于计数(0~9每个数是否出现)
int x,y;
//i表示“赛软件”
for(int i = 100;i <= 999; ++i)
{
//j表示“比赛”
for(int j = 10;j <= 99; ++j)
{
//将i和j分解
y = 0;
x = i * j;
if(x < 1000 || x > 9999) break;
a = i / 100;
arr[a] = 1;
if(a != j % 10 )
{
fun(arr,10);
continue;
}
b = i / 10 % 10;
arr[b] = 1;
if(b != x / 1000 )
{
fun(arr,10);
continue;
}
c = i % 10;
arr[c] = 1;
if(c != (x / 100 % 10) )
{
fun(arr,10);
continue;
}
d = j / 10;
arr[d] = 1;
if(d != (x / 10 % 10) )
{
fun(arr,10);
continue;
}
e = x % 10;
arr[e] = 1;
//判断五个数是否相等
for(int k = 0;k < 10; ++k)
{
y += arr[k];
}
if(5 == y)
{
cout<<i<<" * "<<j<<" = "<<x<<endl;
}
fun(arr,10);
}
}
return 0;
}
//将数组中的元素全部置为0
void fun(int a[],int n)
{
for(int l = 0;l < n; ++l)
{
a[l] = 0;
}
}
运行结果:
465 * 14 = 6510