poj3187-Backward Digit Sums(枚舉全排列),
一,題意:
輸入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 }
View Code
版權聲明:本文為博主原創文章,未經博主允許不得轉載。