#include <iostream>
#include<algorithm>
using namespace std;
int main() {
int a[10],i,j,n,m,k;
for (i = 0; i < 10; i++)
a[i] = i;
//祥瑞生辉+三羊献瑞=三羊生瑞气
//三羊生瑞气祥辉献分布用a[0]-a[7]表示
do {
n = a[5] * 1000 + a[3] * 100 + a[2] * 10 + a[6];
m = a[0] * 1000 + a[1] * 100 + a[7] * 10 + a[3];
k = a[0] * 10000 + a[1] * 1000 + a[2] * 100 + a[3] * 10 + a[4];
if(a[0]==1)//可知“三”必定为1,这样写可以减少计算量
if (n + m == k)
{
cout << n << " " << m << " " << k;
cout << endl;
break;
}
} while (next_permutation(a, a + 10));//用于生成0-9的全排列,因为汉字只有8个因此可以只取排列的前8个数字,此时前8个数字为0-9的全排列,有重复
//同理如果取排列的前5个数字则生成的为0-9的全排列,此时重复的更多,在一些题目上有应用场景
return 0;
}
//另一个例题 题目地址: https://www.lanqiao.cn/courses/2786/learning/?id=67637
/*
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int i,j,k,sum=0,a[9];
for (i = 0; i < 9; i++)
a[i] = i + 1;
int A, B, C, DEF, GHI;
do
{
A = a[0];
B = a[1];
C = a[2];
DEF = a[3] * 100 + a[4] * 10 + a[5];
GHI = a[6] * 100 + a[7] * 10 + a[8];
// cout << A << " " << B << " " << C << " " << DEF << " " << GHI << endl;
if ((A + B*1.0 / C + DEF*1.0 / GHI) == 10)
sum++;
} while (next_permutation(a, a + 9));
cout << sum;
return 0;
}
*/