abc*da=bcde每个字母代表一个0~9的数字,求所有答案,可以用暴力枚举
第一个,自己曾经的思路,暴力枚举,条件复杂,用宏定义代替了
http://blog.csdn.net/a158337/article/details/40591517
#include<stdiohttp://blog.csdn.net/a158337/article/details/40591517.h>
#define CONDITION_1 !((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d))
#define CONDITION_2 ((a*100+b*10+c)*(d*10+a)/10==(b*100+c*10+d))
#define GET_E_VALUE (a*100+b*10+c)*(d*10+a)%10
#define CONDITION_3 ((e!=a)&&(e!=b)&&(e!=c)&&(e!=d))
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++)
{
if(CONDITION_1)
{
e=GET_E_VALUE;
if(CONDITION_2&& CONDITION_3)
{
printf("%d*%d=%d",(a*100+b*10+c),(d*10+a),(a*100+b*10+c)*(d*10+a));
}
}
}
}
}
}
}
第二种:改进了点,代码写起来简单了
#include<stdio.h>
int a[5];
int book[10];
int main()
{
int sum=0;
int i;
for(a[0]=0;a[0]<=9;a[0]++)
for(a[1]=0;a[1]<=9;a[1]++)
for(a[2]=0;a[2]<=9;a[2]++)
for(a[3]=0;a[3]<=9;a[3]++)
for(a[4]=0;a[4]<=9;a[4]++)
{
sum=0;
for(i=0;i<10;i++)
book[i]=0;
for(i=0;i<5;i++)
{
book[a[i]]=1;
}
for(i=0;i<10;i++)
{
if(book[i]==1)
sum++;
}
if(sum==5)
{
if((a[0]*100+a[1]*10+a[2])*(a[3]*10+a[0])==(a[1]*1000+a[2]*100+a[3]*10+a[4]))
{
if(a[3]!=0)
printf("%d%d%d*%d%d=%d%d%d%d\n",a[0],a[1],a[2],a[3],a[0],a[1],a[2],a[3],a[4]);
}
}
}
return 0;
}
第三种:DFS 深度优先搜索算法
#include<stdio.h>
int a[5];
int book[10];
void dfs(int cur,int n)
{
int i=0;
if(cur==n)
{
if((a[0]*100+a[1]*10+a[2])*(a[3]*10+a[0])==(a[1]*1000+a[2]*100+a[3]*10+a[4]))
{
if(a[3]!=0)
printf("%d%d%d*%d%d=%d%d%d%d\n",a[0],a[1],a[2],a[3],a[0],a[1],a[2],a[3],a[4]);
}
}
else
{
for(i=0;i<=9;i++)
{
if(book[i]==0)
{
a[cur]=i;
book[i]=1;
}
dfs(cur+1,n);
book[i]=0;
}
}
}
int main()
{
dfs(0,5);
}