看板 Python 關於我們 聯絡資訊
不好意思又來請教板上前輩... 問題是這樣: 麥克雞塊有 6 塊裝, 9 塊裝跟 20 塊裝。我們如果要找出哪些塊數的雞塊是不能直接 買到的(比如說 5 塊雞塊得買 6 塊雞塊, 然後丟掉一塊, 這樣就不行), 要怎麼找? 最大塊數是多少塊? 我的 code 如下: #program that finds the largest number of McNuggets that cannot be bought #in exact quantity. a = 0 b = 0 c = 0 n = 1 #number of nuggets #sol = (a, b, c) while (n <50): while (c <= n/20): while (b <= n/9): while (a <= n/6): if (6*a + 9*b + 20*c != n): a += 1 else: n += 1 a = 0 b += 1 a = 0 c += 1 b = 0 c = 0 print n n += 1 print 'Done!' n 設定 50 是因為我知道 50 以後不管多少雞塊都可以湊到 code 讓湊不到的都跑出來是因為這樣比較簡單...而我這步都還不會所以先這樣寫...>_< 我的寫法跟前面跑質數寫法基本上一樣(真沒想像力對不起 Orz) 但是不知道為什麼按下 F5 之後什麼都跑不出來... 還請板上前輩賜教, 感謝! -- e^(iπ) + 1 = 0 - Leonhard Euler -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.113.148.21
suzuke:因為a=0, 永遠都讓while(a<=n/6)成立, 所以永遠都不會結束 11/15 04:09
rmbrick:我猜是39 11/15 04:16
rmbrick:你c+=1 然後又c=0 ... 難怪會無窮回圈 11/15 05:44
DigiPrince:建議對於"已知迴圈數"的用 for,未知次數的才用 while 11/15 05:45
DigiPrince:而且這種問題個人會建議用 Dynamic Programming 解。 11/15 05:47
DigiPrince:而且答案應該是 43 不是 39 啦 XD 11/15 05:48
rmbrick:看到的第1眼用猜的 猜錯不用錢XD 11/15 05:56
Equalmusic:我是用之前的 code 改的沒發現, 太感謝了! 11/15 13:11
Equalmusic:不用 for 是因為其實次數是未知, 只是剛好因為上一題 11/15 13:12
Equalmusic:所以我才知道次數, 算是偷吃步, 等這部份修正之後要改 11/15 13:12
Equalmusic:回來...用未知的算法... 11/15 13:12
StubbornLin:我比較喜歡一般的雞塊 11/15 14:32
KSJ:我比較想知道怎麼知道50後就沒了的想法@_@a 11/15 14:40
DigiPrince:可以用歸納法證明,只要有連續 6 個可以組出的整數, 11/15 16:55
DigiPrince:之後的所有整數都可以被組出來。 11/15 16:56
DigiPrince:我比較想知道一般的雞塊跟麥克雞塊差別在哪? XDDDDD 11/15 16:59
StubbornLin:麥克雞塊應該是用肉漿去做出來的吧 = = 11/15 17:51
uranusjr:看到這問題就讓我想起當初學演算法的時光... 11/22 02:00
uranusjr:不過那時候要解的好像是背包問題, 比這個麻煩XD 11/22 02:01