全组和问题
?
?
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <queue> 5 #include <algorithm> 6 #include <cstdio> 7 using namespace std; 8 9 #define MAX_N 10 10 int n; //共n 個數 11 int rcd[MAX_N]; // 記錄每個位置填的數 12 int num[MAX_N]; // 存放輸入的n 個數 13 int usd[MAX_N]; 14 void full_combination(int l, int p) { 15 int i; 16 for (i = 0; i < l; i++) { //每次進入遞歸函數都輸出 17 printf("%d", rcd[i]); 18 if (i < l - 1) 19 printf(" "); 20 } 21 printf("\n"); 22 for (i = p; i < n; i++) { // 循環同樣從p 開始,但結束條件變為i>=n 23 rcd[l] = num[i]; // 在l 位置放上該數 24 full_combination(l + 1, i + 1); //填下一個位置 25 } 26 } 27 int read_data() { 28 int i; 29 n = 3; 30 for (i = 0; i < n; i++) { 31 num[i] = i; 32 usd[i] = 3; 33 } 34 return 1; 35 } 36 int main() { 37 read_data(); 38 full_combination(0, 0); 39 return 0; 40 }不重復的全組和
?
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <queue> 5 #include <algorithm> 6 #include <cstdio> 7 using namespace std; 8 9 #define MAX_N 10 10 int n, m; //輸入n 個數,其中本質不同的有m 個 11 int rcd[MAX_N]; // 記錄每個位置填的數 12 int used[MAX_N]; // 標記m 個數可以使用的次數 13 int num[MAX_N]; // 存放輸入中本質不同的m 個數 14 void unrepeat_combination(int l, int p) { 15 int i; 16 for (i = 0; i < l; i++) { //每次都輸出 17 printf("%d", rcd[i]); 18 if (i < l - 1) 19 printf(" "); 20 } 21 printf("\n"); 22 for (i=p; i<m; i++) //循環依舊從p 開始,枚舉剩下的本質不同的數 23 if (used[i] > 0) { // 若還可以用, 則可用次數減 24 used[i]--; 25 rcd[l] = num[i]; //在l 位置放上該數 26 unrepeat_combination(l + 1, i); //填下一個位置 27 used[i]++; //可用次數恢復 28 } 29 } 30 int read_data() { 31 int i; 32 n = 3; 33 m=3; 34 for (i = 0; i < n; i++) { 35 num[i] = i; 36 used[i] = i+1; 37 } 38 39 return 1; 40 } 41 int main() { 42 read_data(); 43 unrepeat_combination(0,0); 44 return 0; 45 }?
?
?
?
?
轉載于:https://www.cnblogs.com/kakamilan/archive/2012/08/04/2622856.html
總結
- 上一篇: 漫长的数据中心绿化之路到底该如何走www
- 下一篇: 为什么程序员不擅长估算时间?