Re: [問題] C和組合
我只想到用 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
10/12 19:35, 1F
對
※ 編輯: ericinttu 來自: 59.117.115.141 (10/12 19:57)
討論串 (同標題文章)