看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《pziyout (pziyout)》之銘言: : ※ 引述《ozone (道別,下段旅程。)》之銘言: : : 兩個int陣列array1, array2, 長度皆為8, 想在每個位置從其中一個array取出值 : : 組成新的array同樣長度也是8, 共2^8=256種組合, 不知有什麼比較有效率的方法? : : 我只會用for loop, int i=0;i<256;i++, 將i轉成2進位字串 : : 再對照此字串的8個字元位置是0或1 個別選擇array1或array2組成新的array... : : 感覺繞了好大一圈...不曉得有什麼簡潔的方法完成這個操作? 感謝 : 不要轉為二進位字串,直接取值如下,事實上,還滿簡潔的: : const int N = 8 ; : int i , j ; : int a[N] = {11,12,13,14,15,16,17,18}; : int b[N] = {21,22,23,24,25,26,27,28}; : int c[N] ; : for ( i = 0 ; i < 256 ; ++i ) { : cout << i+1 << " : " ; : for ( j = 0 ; j < N ; ++j ) { : c[j] = ( i&(1<<j) ? a[j] : b[j] ) ; : cout << c[j] << " " ; : } : cout << endl ; : } 這種作法沒有辦法處理三個以上的陣列問題,假設原問題變為三個陣列, 那麼就要改成以下的方式: const int N = 8 , M = 3 ; int i , j , m , n , k ; int a[M][N] = {{11,12,13,14,15,16,17,18}, {21,22,23,24,25,26,27,28}, {31,32,33,34,35,36,37,38}}; m = int(pow(M,N)) ; for ( i = 0 ; i < m ; ++i ) { cout << i+1 << " : " ; n = i ; for ( j = 0 ; j < N ; ++j ) { k = n%M ; c[j] = a[k][j] ; cout << c[j] << " " ; n = n/M ; } cout << endl ; } 這樣也可以處理四個陣列以上的問題。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.25.29 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1488421426.A.179.html
ozone: 感謝! N進位法利用餘數與除法在N個歸類選擇上的實做! 很有 03/04 04:26
ozone: 啟發! 03/04 04:26