next_permutation:下一个排列
函数所需头文件#include
一段代码和结果就明白其作用:
问题,找出1,2,3所有的三位数:
代码:
#include#include using namespace std; int a[3] = { 1,2,3 }; int main() { do { cout << a[0] << a[1] << a[2] << endl; } while (next_permutation(a, a + 3)); }
运行结果:
洛谷P1618题目:
将 1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。
输入:1 2 3
输出:
192 384 576
219 438 657
273 546 819
327 654 981
代码如下:
#include#include using namespace std; int a[10] = { 0,1,2,3,4,5,6,7,8,9 }; int x, y, z;//比例数 int main() { cin >> x >> y >> z; int t = x * y*z; int A, B, C; int amount = 0;//判断是否有组合 A = t / x; B = t / y; C = t / z; do { if ((a[1] * 100 + a[2] * 10 + a[3])*A == (a[4] * 100 + a[5] * 10 + a[6])*B && (a[4] * 100 + a[5] * 10 + a[6])*B == (a[7] * 100 + a[8] * 10 + a[9])*C) { cout << a[1] << a[2] << a[3] << " " << a[4] << a[5] << a[6] << " " << a[7] << a[8] << a[9] << endl; amount++; } } while (next_permutation(a + 1, a + 10));//全排列 if (amount == 0) cout << "No!!!" << endl; return 0; }



