[問題] 將數筆有規則的資料存入二維陣列

看板C_and_CPP作者 (HUGO)時間16年前 (2009/12/28 10:54), 編輯推噓5(5014)
留言19則, 5人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我想將下面這些資料自動地存到一個二維陣列中, 0 1 2 3 4 0 1 1 1 2 1 這階段每次取1個位置,並設為1 3 1 4 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 這階段取每次取2個位置,並設為1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 1 16 1 1 1 17 1 1 1 18 1 1 1 19 1 1 1 這階段取每次取3個位置,並設為1 20 1 1 1 21 1 1 1 22 1 1 1 23 1 1 1 24 1 1 1 25 1 1 1 1 26 1 1 1 1 這階段取每次取4個位置,並設為1 27 1 1 1 1 28 1 1 1 1 1 這階段取每次取5個位置,並設為1 我要宣告一個二維陣列來存上面的資料 array[100][5]; // 預設值皆為0 由於無法預知總共會產生幾筆資料,所以預設最大為100筆, 從上述例子推知... 第21筆資料array[20][5]={1, 0, 0, 1, 1} 第29筆資料array[28][5]={1, 1, 1, 1, 1} 希望大家看得懂我的問題, 我想破了頭都無法正確地將上述資料存到陣列中, 不知道各位先進能否指點迷津, 感激不盡~ 謝謝ADF兄的建議, 使用prev_permutation可以完全解決我的需求, 程式碼如下: int a[5]; int array[100][5]; int num = 0; for(int i=0; i<100; i++) for(int j=0; j<5; j++) array[i][j] = 0; for(int i=0; i<5; i++) a[i] = 0; for(int i=0; i<5; i++) { for(int j=0; j<(i+1); j++) a[j] = 1; do { for(int j=0; j<5; j++) { array[num][j] = a[j]; cout << a[j] <<" "; } num++; cout << endl; }while (prev_permutation(a,a+5)); }

12/28 11:04, , 1F
總共會有幾筆是可以用數學排列組合算出來的吧?_?
12/28 11:04, 1F

12/28 11:05, , 2F
不確定你的5那個維度是不是動態的, 不然就照你現在想的,
12/28 11:05, 2F

12/28 11:05, , 3F
直接寫死28比資料不就好了?? 唯一的問題是程式碼上不能
12/28 11:05, 3F

12/28 11:06, , 4F
像你"第21筆"與"第28筆"那兩行那樣寫, 這種寫法只有在
12/28 11:06, 4F

12/28 11:07, , 5F
靜態陣列宣告同時給初值時使用; 所以想同時給初值請於宣
12/28 11:07, 5F

12/28 11:07, , 6F
告array[][]時一次寫上; 或者以array[i][j]的方式一個個
12/28 11:07, 6F

12/28 11:07, , 7F
element給值; 又或者直接預存成file直接讀檔讀回來@_@"
12/28 11:07, 7F

12/28 11:08, , 8F
5是動態的,所以不能寫死
12/28 11:08, 8F

12/28 11:10, , 9F
不知道你是不是要把全排列的結果都存入陣列?
12/28 11:10, 9F

12/28 11:10, , 10F
這樣的話應該會有32種或31種才對
12/28 11:10, 10F

12/28 11:10, , 11F
5只是拿來舉例說明,範圍可能是1~20
12/28 11:10, 11F

12/28 11:11, , 12F
如果是這樣的話,就把1~32轉成二進位後的結果存入即可
12/28 11:11, 12F

12/28 11:12, , 13F
其實小弟我也是想到用轉二進位的方式偷雞....XD
12/28 11:12, 13F

12/28 11:12, , 14F
跑迴圈或者遞迴寫排列組合總覺得好麻煩....Orz
12/28 11:12, 14F

12/28 11:13, , 15F
只是用二進位的方式順序似乎會和原po的例子不match@_@"
12/28 11:13, 15F

12/28 11:23, , 16F
如果是 C++ 就用 next_permutation
12/28 11:23, 16F

12/28 13:11, , 17F
二進位的話要再排序,第一是存值的個數、再來是數字大小
12/28 13:11, 17F

12/28 13:17, , 18F
謝謝大家的幫忙 prev_permutation可以解決我的問題
12/28 13:17, 18F

12/28 13:18, , 19F
而且排列完全符合我的要求~
12/28 13:18, 19F
※ 編輯: HUGOZVC 來自: 208.123.162.2 (12/28 13:40)
文章代碼(AID): #1BE1tpk6 (C_and_CPP)