/**************************************************************************
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
分析得:
F = 5
G = 0
X = A + (B + (C + D + D + 1) / 10) / 10
Y = (B + (C + D + D + 1) / 10) %10
Z = (C + D + D + 1) % 10
************************************************************************/
#include <stdio.h>
enum{A=0,B,C,D,E,F,G,X,Y,Z};
int nNum[10];
char* exp = "/
%d %d %d %d %d/n/
%d %d %d/n/
+ %d %d %d/n/
───────/n/
%d %d %d %d %d/n";
int checked()
{
int i,j;
for(i=0; i<=9; i++)
{
for(j=i+1; j<=9; j++)
if(nNum[i] == nNum[j])
return 0;
}
return 1;
}
void output()
{
printf(exp,nNum[A],nNum[B],nNum[C],nNum[D],nNum[E],nNum[D],nNum[F],
nNum[G],nNum[D],nNum[F],nNum[G],nNum[X],nNum[Y],nNum[Z],nNum[D],nNum[E]);
printf("/n");
}
void main()
{
nNum[F] = 5;
nNum[G] = 0;
for(nNum[A]=1; nNum[A]<=9; nNum[A]++)
{
for(nNum[B]=1; nNum[B]<=9; nNum[B]++)
{
for(nNum[C]=1; nNum[C]<=9; nNum[C]++)
{
for(nNum[D]=1; nNum[D]<=9; nNum[D]++)
{
for(nNum[E]=1; nNum[E]<=9; nNum[E]++)
{
nNum[X] = nNum[A] + (nNum[B] + (nNum[C] + nNum[D] + nNum[D] + 1)/10)/10;
nNum[Y] = (nNum[B] + (nNum[C] + nNum[D] + nNum[D] + 1)/10)%10;
nNum[Z] = (nNum[C] + nNum[D] + nNum[D] + 1)%10;
if(checked())
{
output();
}
}
}
}
}
}
}