Re: [問題] C和組合

看板C_and_CPP作者 (~ ~ ~)時間14年前 (2011/10/12 19:25), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
我只想到用 4層for-loop 或者用 遞迴去解 1. 4層for-loop 假設使用者輸入 N 50元可以挑的範圍是 [0, floor(N/50)] 10元 [0, floor(N/10)] 5元 [0, floor(N/5)] 當前三種硬幣數量決定了之後, 剩下的餘數就由 1元硬幣 補足. 當然, 這樣的考慮方式會遇到爆掉的情況(50元的+10元的+5元的 就超過N了) 可以加個判斷式略過爆掉的情況, 或者在每一個 for-loop 裡的判斷條件, 改成 floor( (N-已取金額)/10 ) 這樣 2. 用遞迴 void coin_solver(int* answer, int N, int usingCoin) { //answer[0]:50元硬幣有幾個. usingCoin: 50,10,5,1 int answerIndex; int nextUsingCoin; if(usingCoin==50) {answerIndex=0;nextUsingCoin=10;} else if(usingCoin==10) {answerIndex=1;nextUsingCoin=5;} else if(usingCoin==5) {answerIndex=2;nextUsingCoin=1;} else if(usingCoin==1) {answerIndex=3;} if( usingCoin==1) { answer[answerIndex] = N; printf("%d,%d,%d,%d\n",answer[0],answer[1],answer[2],answer[3]); } else { for(int i=0;i<=N/usingCoin;i++) { answer[answerIndex]=i; coin_solver(answer,N-i*usingCoin,nextUsingCoin); } } } 遞迴大概是長這樣子. 如果有問題, 請自行修正. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.115.141 ※ 編輯: ericinttu 來自: 59.117.115.141 (10/12 19:30)

10/12 19:35, , 1F
i<N/usingCoin -> i <= N/usingCoin ?
10/12 19:35, 1F
※ 編輯: ericinttu 來自: 59.117.115.141 (10/12 19:57)
文章代碼(AID): #1EbNb2Vk (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1EbNb2Vk (C_and_CPP)