题目描述
用1, 2, 3…9 这九个数字组成一个数学公式,满足:ABC + DEF = GHI,每个数字只能出现一次,编写程序输出所有的组合。
输入
无
输出
输出所有的 ABC + DEF = GHI,
每行一条数据,格式为ABC+DEF=GHI
输出结果按照ABC升序排列,如果ABC相同,则按照DEF升序排列。
#include<bits/stdc++.h>
#define swap(x, y) {int temp=x;x=y;y=temp;}
using namespace std;
const int N=1005;
typedef struct{
int x,y,z;
}Node;
Node node[N];
int num;
int a[9]={1,2,3,4,5,6,7,8,9};
bool cmp(Node a,Node b){
if(a.x==b.x)
return a.y<b.y;
else
return a.x<b.x;
}
int b[N];
void Find(int x,int y)
{
if(x==y){
int x1=a[0]*100+a[1]*10+a[2];
int x2=a[3]*100+a[4]*10+a[5];
int x3=a[6]*100+a[7]*10+a[8];
if(x1+x2==x3){
node[num].x=x1;
node[num].y=x2;
node[num].z=x3;
num++;
}
return;
}
for(int i=x; i<=y; i++){
swap(a[i],a[x]);
Find(x+1,y);
swap(a[i],a[x]);
}
}
int main()
{
num=0;
Find(0,8);
sort(node,node+num,cmp);
for(int i=0;i<num;i++){
printf("%d+%d=%d\n",node[i].x,node[i].y,node[i].z);
}
}