看板 C_and_CPP 關於我們 聯絡資訊
我想到的解法: 是以數字進位的想法為基礎 以單迴圈模擬多層迴圈 在迴圈開始前就設定每一層級的 min 跟 max ===== 原本的程式碼 ===== #include <iostream> using namespace std; void main() { int max[] = {1 ,7, 6, 5}; int min[] = {0 ,4, 3, 2}; int forLoop[] = {0 ,4, 3, 2}; for(forLoop[1] = min[1] ; forLoop[1] <= max[1] ; forLoop[1]++) for(forLoop[2] = min[2] ; forLoop[2] <= max[2] ; forLoop[2]++) for(forLoop[3] = min[3] ; forLoop[3] <= max[3] ; forLoop[3]++) { cout << forLoop[1] << " " << forLoop[2] << " " << forLoop[3] << " "; cout << endl; } system("pause"); } ===== 修改後程式碼 ===== #include <iostream> using namespace std; void main() { int max[] = {1 ,7, 6, 5}; int min[] = {0 ,4, 3, 2}; int forLoop[] = {0 ,4, 3, 2}; int length = sizeof(max) / sizeof(max[0]); while(forLoop[0] == 0) { //在這裡使用變數 for(int i = 1 ; i < length ; i++) cout << forLoop[i] << " "; cout << endl; //以下是進位處理 forLoop[length-1] ++; for(int i = length-1 ; i >= 0 ; i--) if( forLoop[i] > max[i]) { forLoop[i] = min[i]; forLoop[i-1] ++; } } system("pause"); } ===== 兩邊的程式碼功能是一樣的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.166.85
etrexetrex:要改層數可以直接加在 max 跟 min 陣列後面 11/01 12:11
softwind:動態調整迴圈深度 就是要gen function body了 11/01 12:42
softwind:不用function object解決 應該不符合原本的要求 11/01 12:43
etrexetrex:蛤? 11/01 12:45
softwind:sorry 不是針對你 而是這討論串 都沒有人用ftor... 11/01 12:48