程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj3187-Backward Digit Sums(枚舉全排列),

poj3187-Backward Digit Sums(枚舉全排列),

編輯:C++入門知識

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

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved