#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; } */