看板 b96902HW 關於我們 聯絡資訊
: 記得P老師上課說 : 一個指標指著每一個陣列裡的元素 : 決定選或不選 : 要怎麼決定?? : <code 馬賽克> : 這個是遇到了整除的就選 : <code 馬賽克> : 這個是遇到了整除的就跳過 : 那到底要怎麼決定選or不選?? : 因為是要print出所有可能的情況... : 想了好久 給點提示ㄅ... Well, 你有來助教課嗎? XD 以助教課上的例子來說, 假設我們寫了一個 function: int choose(n, m), 要列出從 1, 2, ..., n 之中選 m 個數的所有方式, 事實上可以想成: 1. 不選第 n 個數, 直接列出 1, 2, ..., n - 1 之中選 m 個數的所有方式. 2. 選第 n 個數, 再列出 1, 2, ..., n - 1 之中選 m - 1 個數的所有方式. 上面兩種情況就包含所有的可能了. 因此, choose(n, m) 可以這樣寫: (注意我省略了一些終止條件) void choose(int n, int m){ if(m == 0){ /* 全部都選完之後再輸出 */ output the choice; return; } choose(n - 1, m); /* 不選 n */ select n; /* 也許是在一個陣列裡做一個記號, 或是把 n 記錄到某個用來輸出的陣列 */ choose(n - 1, m - 1); /* n 已經選起來了 */ unselect n; /* 記得要把選 n 的動作清除! 要不然你可以試試看 XD */ } 第一個 choose(n - 1, m) 跑完後, 就會列出所有 "不選 n" 的方式, 第二個 choose(n - 1, m - 1) 跑完後, 就會列出所有 "選 n" 的方式. 我想, 上面的註解裡應該有回答到你的問題吧? : ps可以要助教的msn嗎?? 我有公佈啊 ;p 不過我只偶爾上一下而已 XD : 還有禮拜三的投影片 可以上傳了嗎XD 李振宇助教的投影片快要上傳了 XD 我的要把後面沒講的修掉, 不過今天比較忙還沒修 ^^" 明天會上傳. -- >_< U -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.54
folkterry:well! 好像不是那麼容易就可以擊殺使徒五 10/25 23:33
greenoyster:那個 我還沒傳這禮拜的^^" 10/25 23:43
chhsiao:囧 我看錯了 以為網頁有更新 10/25 23:44
※ 編輯: chhsiao 來自: 140.112.30.54 (10/25 23:45)
chhsiao:又忘記上傳了 XD 現在己上傳, 不過 oyster 助教的還沒有. 10/27 01:15