作者chhsiao (bye~)
看板b96902HW
標題[使徒] 來點提示好了 ;p
時間Thu Oct 25 23:30:03 2007
: 記得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
1F:推 folkterry:well! 好像不是那麼容易就可以擊殺使徒五 10/25 23:33
2F:推 greenoyster:那個 我還沒傳這禮拜的^^" 10/25 23:43
3F:推 chhsiao:囧 我看錯了 以為網頁有更新 10/25 23:44
※ 編輯: chhsiao 來自: 140.112.30.54 (10/25 23:45)
4F:推 chhsiao:又忘記上傳了 XD 現在己上傳, 不過 oyster 助教的還沒有. 10/27 01:15