题目
参考代码
#include<bits/stdc++.h>
using namespace std;
int ia[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int a, b, c;
int main(void) {
do {
a = ia[2] + ia[1] * 10 + ia[0] * 100;
b = ia[5] + ia[4] * 10 + ia[3] * 100;
c = ia[8] + ia[7] * 10 + ia[6] * 100;
if (b == 2 * a && c == 3 * a)
cout << a << ' ' << b << ' ' << c << endl;
} while (next_permutation(ia, ia + 9));
return 0;
}
解题思路
刚看题目可能会想到dfs,但是这样会比较麻烦,不易想
所以由于此题中9个数字不会重复使用,并且数据量不大,那么我们可以试一试全排列,也就是算法库中的next_permutation()
函数
代码很易看懂,这里不多赘述
注意事项
这个题比较坑的地方是没有说每不同组解按什么顺序输出,因为这个我WA了好几次找不到原因
正确的顺序是从小到大排列,也就是按照每组解的第一个数从从小到大的顺序排列,这也就要求我们在循环的时候要先将排列在前的数作为百位上的数来计算
举个例子
//应该是
a = ia[2] + ia[1] * 10 + ia[0] * 100;
//而不是
a = ia[0] + ia[1] * 10 + ia[1] * 100;