一个入门必做的题,我做了 却不知道错在那里??
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
这是我写的源程序, 我用的是穷举法。
#include<stdio.h>
void main()
{
int A,B,C,D,E,F,G,X,Y,Z;
for(A=0;A<=9;A++)
for(B=0;B<=9;B++)if(A==B) continue;
for(C=0;C<=9;C++) if(B==C||A==C) continue;
for(D=0;D<=9;D++) if(C==D||B==D||A==D) continue;
for(E=0;E<=9;E++) if(A==E||B==E||C==E||D==E) continue;
for(F=0;F<=9;F++) if(A==F||B==F||C==F||D==F||E==F) continue;
for(G=0;G<=9;G++) if(A==G||B==G||C==G||D==G||E==G||F==G) continue;
for(X=0;X<=9;X++) if(A==X||B==X||C==X||D==X||E==X||F==X||G==X) continue;
for(Y=0;Y<=9;Y++) if(A==Y||B==Y||C==Y||D==Y||E==Y||F==Y||G==Y||X==Y) continue;
for(Z=0;Z<=9;Z++) if(A==Z||B==Z||C==Z||D==Z||E==Z||F==Z||G==Z||X==Z||Y==Z) continue;
if(A*10000+B*1000+C*100+D*10+E+2*(Z*100+F*10+G)==X*10000+Y*1000+Z*100+D*10+E)
{
printf("A=%dB=%dC=%dD=%dE=%dF=%dG=%dX=%dY=%dZ=%d",A,B,C,D,E,F,G,X,Y,Z);
}
}
18楼的兄弟
用递归写了一个正确的程序:
#include "stdio.h"
#define TRUE 1
#define FALSE 0
typedef unsigned char boolean;
boolean Judge(unsigned int *p[10])
{
int c2,c3,c4,c5;
c2=(*p[4]+*p[6]*2)/10;
c3=(*p[3]+*p[5]*2+c2)/10;
c4=(*p[2]+*p[3]*2+c3)/10;
c5=(*p[1]+c4)/10;
if(0 != (*p[6]*2)%10)
return FALSE;
if(0 != (*p[5]*2+c2)%10)
return FALSE;
if(*p[9] != (*p[2]+*p[3]*2+c3)%10)
return FALSE;
if(*p[8] != (*p[1]+c4)%10)
return FALSE;
if(*p[7] != (*p[0]+c5))
return FALSE;
return TRUE;
}
void guess(unsigned int n,unsigned int *p[10])
{
unsigned int i,j,flag;
if(0 == n)
{
if(TRUE == Judge(p))
{
printf("**************************************\n");
printf("A\tB\tC\tD\tE\t\n");
printf("%d\t%d\t%d\t%d\t%d\n",*p[0],*p[1],*p[2],*p[3],*p[4]);
printf("F\tG\tX\tY\tZ\t\n");
printf("%d\t%d\t%d\t%d\t%d\n",*p[5],*p[6],*p[7],*p[8],*p[9]);
printf("**************************************\n");
}
}
else
{
for(i=0;i<10;i++)
{
flag=TRUE;
for(j=9;j>=n;j--)
{
if(i == *p[j])
{
flag = FALSE;
break;
}
}
if(FALSE == flag)
continue;
*p[n-1]=i;
guess(n-1,p);
}
}
}
int main()
{
unsigned int A,B,C,D,E,F,G,X,Y,Z;
unsigned int *p[10];
p[0]=&A;p[1]=&B;p[2]=&C;p[3]=&D;p[4]=&E;
p[5]=&F;p[6]=&G;p[7]=&X;p[8]=&Y;p[9]=&Z;
guess(10,p);
getch();
}
[[it] 本帖最后由 wwbbqq 于 2008-4-15 20:39 编辑 [/it]]