在下面两个加法算式中,每个数字都代表0~9的一个数字,而且不同的字母代表不同的数字
AAA+BBB+CCC=FGHI
AAA+DDD+EEE=FGHI
请问A代表哪一个数字?
#include
<
stdio.h
>
void testnum( int a[ 5 ], int num[ 10 ], int n, int i) /* 递归判断 */
{
int j;
if (i == 5 )
{
if ((a[ 1 ] + a[ 2 ] == a[ 3 ] + a[ 4 ]) && (a[ 0 ] + a[ 1 ] + a[ 2 ] == n))
{
for (j = 0 ;j < 5 ;j ++ )
printf( " %4d " ,a[j]);
printf( " " );
}
}
else
{
for (j = 0 ;j < 10 ;j ++ )
if (num[j] !=- 1 )
{
a[i ++ ] = j;
num[j] =- 1 ;
testnum(a,num,n,i);
num[j] = j;
i -- ;
}
}
}
void main()
{
int n,result,flag,wei,num[ 10 ];
int a[ 5 ],i,j;
clrscr();
i = 0 ;
printf( " a b c d e f " );
for (n = 10 ;n <= 27 ;n ++ )
{
for (j = 0 ;j < 10 ;j ++ )
num[j] = j;
flag = 1 ;
result = n * 111 ;
do {
wei = result % 10 ;
if (num[wei] ==- 1 ) /* 若当前位已存在就退出当前循环 */
{
flag = 0 ;
break ;
}
else
num[wei] =- 1 ; /* 不存在时修改容器中已使用数为-1 */
result /= 10 ;
} while (result); /* 取最终结果的每位,并检查 */
if (flag)
{
i = 0 ;
for (j = 0 ;j < 5 ;j ++ )
a[j] = 0 ;
printf( " " );
testnum(a,num,n,i);
}
}
}
void testnum( int a[ 5 ], int num[ 10 ], int n, int i) /* 递归判断 */
{
int j;
if (i == 5 )
{
if ((a[ 1 ] + a[ 2 ] == a[ 3 ] + a[ 4 ]) && (a[ 0 ] + a[ 1 ] + a[ 2 ] == n))
{
for (j = 0 ;j < 5 ;j ++ )
printf( " %4d " ,a[j]);
printf( " " );
}
}
else
{
for (j = 0 ;j < 10 ;j ++ )
if (num[j] !=- 1 )
{
a[i ++ ] = j;
num[j] =- 1 ;
testnum(a,num,n,i);
num[j] = j;
i -- ;
}
}
}
void main()
{
int n,result,flag,wei,num[ 10 ];
int a[ 5 ],i,j;
clrscr();
i = 0 ;
printf( " a b c d e f " );
for (n = 10 ;n <= 27 ;n ++ )
{
for (j = 0 ;j < 10 ;j ++ )
num[j] = j;
flag = 1 ;
result = n * 111 ;
do {
wei = result % 10 ;
if (num[wei] ==- 1 ) /* 若当前位已存在就退出当前循环 */
{
flag = 0 ;
break ;
}
else
num[wei] =- 1 ; /* 不存在时修改容器中已使用数为-1 */
result /= 10 ;
} while (result); /* 取最终结果的每位,并检查 */
if (flag)
{
i = 0 ;
for (j = 0 ;j < 5 ;j ++ )
a[j] = 0 ;
printf( " " );
testnum(a,num,n,i);
}
}
}