一,题意:
输入n,sum,求1~n的数,如何排列之后,相邻两列相加,直到得出最后的结果等于sum,输出1~n的排列(杨辉三角)
3 1 2 4 //1~n 全排列中的一个排列
4 3 6
7 9
sum = 16
二,思路:
枚举1~n的所有排列,直至有一种排列使得最后结果为sum就结束。next_permutation()全排列函数的运用
1 #include<iostream>
2 #include<algorithm>
3 using namespace std;
4 int main() {
5 int n, sum;
6 while (cin >> n >> sum) {
7 int a[11], b[11];
8 for (int i = 0; i < n; i++) {
9 a[i] = i + 1;
10 }
11 do {
12 for (int i = 0; i < n; i++) {
13 b[i] = a[i]; //不能改变a[]中的值,用b[]代替a[]
14 }
15 int i;
16 for (i = n; i > 1; i--) { //第一次n个数相加,第二次n-1个数相加...直到只剩2个数相加
17 for (int j = 0; j < i - 1; j++) {
18 b[j] = b[j] + b[j + 1]; //后面的每一个数往前一位加,最后都加到a[0]上
19 }
20 }
21 if (b[0] == sum)break;
22 } while (next_permutation(a, a + n));
23 for (int i = 0; i < n ; i++) {
24 cout << a[i] << " ";
25 }
26 cout << endl;
27 }
28 return 0;
29 }
版权声明:本文为博主原创文章,未经博主允许不得转载。
poj3187-Backward Digit Sums(全排列+暴力)
原文:http://www.cnblogs.com/My-Sunshine/p/4985455.html