给定等式 A B C D E
D F G
+ D F G
───────
X Y Z D E
其中每个字母代表一个数字,且不同数字对应不同字母。编程求出这些数字并且打出这个数字的算术计算竖式。
[C++]
//
// 1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
// D F G 同字母。编程求出这些数字并且打出这个数字的
// / + D F G 算术计算竖式。
// ───────
// X Y Z D E
///
// (DE+FG+FG)%100 = DE -> FG = 50
// Z = (C+D+D+1)%10
// Y = ((C+D+D+1)/10 + B)%10 && Y != 0 && Z != 0 (becase g=0 so y!=0,z!=0)
// -> B == 9 && C +D +D +1 > 20 -> C >= 5 && D >= 5
// X != A ->X = A+1
// E = 45 - (A +9 + C +D +E + 5 +0 +X +Y +Z) = 31 - A -C -D -E -X -Y -Z
/
#include "stdio.h"
void main()
{
unsigned int a, c, d, e, x, y, z;
printf("%10s/n", "A B C D E");
printf("%10s/n", "D F G");
printf("+%9s/n", "D F G");
printf("%10s/n", "───────");
printf("%10s/n/n/n", "X Y Z D E");
for(a = 1; a < 9; a++) //不从开始,因为G=0,而且b=9
{
//因为判断出b=9,所以不用加b的循环
if(a == 5) //a不能为,因为f=5;
continue;
for(c = 5; c < 9; c++)
{
if(c == a )
continue;
for(d = 5; d < 9; d++)
{
if(d == a || d == c)
continue;
x = a +1;
y = ((c +2*d +1)/10 + 9)%10;
z = (c +2*d +1)%10;
e = 31-a-c-d-x-y-z;
if(x != a && y != a && z != a && e != a
&& x != 9 && y != 9 && z != 9 && e != 9
&& x != c && y != c && z != c && e != c
&& x != d && y != d && z != d && e != d
&& x != 5 && y != 5 && z != 5 && e != 5
&& x != 0 && y != 0 && z != 0 && e != 0
&& x != y && x != z && x != e && y != z
&& y != e && z != e
&& 10000*a +9000 +100*c +10*d +e +2*(100*d +50)
== 10000*x +1000*y +100*z +10*d +e)
{
printf("%2d%2d%2d%2d%2d/n", a, 9, c, d, e);
printf("%*d%2d%2d/n", 6, d, 5, 0);
printf("+%*d%2d%2d/n", 5, d, 5, 0);
printf("%10s------------/n", "------------");
printf("%2d%2d%2d%2d%2d/n", x, y, z, d, e);
}
}
}
}
}