主题:数字求和
1到9这几个数字,每三个组成一个三位数,每个数字只能用一次,要求其中两个的和等于第三个的值。求出所有的符合要求的数字
#include<stdio.h>
#include<stdlib.h>
int main()
{
int A[3] = {0}; //数字A
int B[3] = {0}; //数字B
int C[3] = {0}; //和
int nSet[3] = {0}; //进位
for (int i1 = 1; i1 <= 9; ++i1) //查找个位
{
A[2] = i1; //数字A的个位
for (int j1 = 1; j1 <= 9; ++j1)
{
B[2] = j1; //数字B的个位
if (B[2] != A[2]) //数字不重复
{
C[2] = (A[2]+B[2])%10; //结果的个位
if (C[2] != A[2] && C[2] != B[2] && C[2] != 0) //数字不重复
{
nSet[2] = (A[2]+B[2])/10; //结果的进位
for (int i2 = 1; i2 <= 9; ++i2) //查找十位
{
A[1] = i2; //数字A的十位
if (A[1] != A[2] && A[1] != B[2] && A[1] != C[2]) //数字不重复
{
for (int j2 = 1; j2 <= 9; ++j2)
{
B[1] = j2;//数字B的十位
if (B[1] != A[1] && B[1] != A[2] && B[1] != B[2] && B[1] != C[2]) //数字不重复
{
C[1] = (A[1] + B[1] + nSet[2])%10; //结果的十位
if (C[1] != C[2] && C[1] != A[2] && C[1] != B[2] &&
C[1] != A[1] && C[1] != B[1] && C[1] != 0) //数字不重复
{
nSet[1] = (A[1] + B[1] + nSet[2])/10; //结果的进位
for (int i3 = 1; i3 <= 9; ++i3)
{
A[0] = i3; //结果的百位
if (A[0] != A[1] && A[0] != A[2] &&
A[0] != B[1] && A[0] != B[2] &&
A[0] != C[1] && A[0] != C[2]) //数字不重复
{
for (int j3 = 1; j3 <= 9; ++j3)
{
B[0] = j3;
if (B[0] != A[0] && B[0] != A[1] && B[0] != A[2] &&
B[0] != B[1] && B[0] != B[2] &&
B[0] != C[1] && B[0] != C[2]) //数字不重复
{
C[0] = (A[0] + B[0] + nSet[1])%10; //结果的百位
nSet[0] = (A[0] + B[0] + nSet[1])/10; //结果的进位
if (nSet[0] == 0 && C[0] != C[1] && C[0] != C[2] &&
C[0] != A[0] && C[0] != A[1] && C[0] != A[2] &&
C[0] != B[0] && C[0] != B[1] && C[0] != B[2])
{
printf("%d%d%d + %d%d%d = %d%d%d\n", A[0], A[1], A[2],
B[0], B[1], B[2],
C[0], C[1], C[2]);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
int A[3] = {0}; //数字A
int B[3] = {0}; //数字B
int C[3] = {0}; //和
int nSet[3] = {0}; //进位
for (int i1 = 1; i1 <= 9; ++i1) //查找个位
{
A[2] = i1; //数字A的个位
for (int j1 = 1; j1 <= 9; ++j1)
{
B[2] = j1; //数字B的个位
if (B[2] != A[2]) //数字不重复
{
C[2] = (A[2]+B[2])%10; //结果的个位
if (C[2] != A[2] && C[2] != B[2] && C[2] != 0) //数字不重复
{
nSet[2] = (A[2]+B[2])/10; //结果的进位
for (int i2 = 1; i2 <= 9; ++i2) //查找十位
{
A[1] = i2; //数字A的十位
if (A[1] != A[2] && A[1] != B[2] && A[1] != C[2]) //数字不重复
{
for (int j2 = 1; j2 <= 9; ++j2)
{
B[1] = j2;//数字B的十位
if (B[1] != A[1] && B[1] != A[2] && B[1] != B[2] && B[1] != C[2]) //数字不重复
{
C[1] = (A[1] + B[1] + nSet[2])%10; //结果的十位
if (C[1] != C[2] && C[1] != A[2] && C[1] != B[2] &&
C[1] != A[1] && C[1] != B[1] && C[1] != 0) //数字不重复
{
nSet[1] = (A[1] + B[1] + nSet[2])/10; //结果的进位
for (int i3 = 1; i3 <= 9; ++i3)
{
A[0] = i3; //结果的百位
if (A[0] != A[1] && A[0] != A[2] &&
A[0] != B[1] && A[0] != B[2] &&
A[0] != C[1] && A[0] != C[2]) //数字不重复
{
for (int j3 = 1; j3 <= 9; ++j3)
{
B[0] = j3;
if (B[0] != A[0] && B[0] != A[1] && B[0] != A[2] &&
B[0] != B[1] && B[0] != B[2] &&
B[0] != C[1] && B[0] != C[2]) //数字不重复
{
C[0] = (A[0] + B[0] + nSet[1])%10; //结果的百位
nSet[0] = (A[0] + B[0] + nSet[1])/10; //结果的进位
if (nSet[0] == 0 && C[0] != C[1] && C[0] != C[2] &&
C[0] != A[0] && C[0] != A[1] && C[0] != A[2] &&
C[0] != B[0] && C[0] != B[1] && C[0] != B[2])
{
printf("%d%d%d + %d%d%d = %d%d%d\n", A[0], A[1], A[2],
B[0], B[1], B[2],
C[0], C[1], C[2]);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
system("pause");
return 0;
}