作者Equalmusic (Cosmajoonitist)
看板Python
标题[问题] 买麦克鸡块的问题
时间Tue Nov 15 03:22:53 2011
不好意思又来请教板上前辈...
问题是这样:
麦克鸡块有 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
1F:→ suzuke:因为a=0, 永远都让while(a<=n/6)成立, 所以永远都不会结束 11/15 04:09
2F:→ rmbrick:我猜是39 11/15 04:16
3F:→ rmbrick:你c+=1 然後又c=0 ... 难怪会无穷回圈 11/15 05:44
4F:推 DigiPrince:建议对於"已知回圈数"的用 for,未知次数的才用 while 11/15 05:45
5F:→ DigiPrince:而且这种问题个人会建议用 Dynamic Programming 解。 11/15 05:47
6F:→ DigiPrince:而且答案应该是 43 不是 39 啦 XD 11/15 05:48
7F:→ rmbrick:看到的第1眼用猜的 猜错不用钱XD 11/15 05:56
8F:→ Equalmusic:我是用之前的 code 改的没发现, 太感谢了! 11/15 13:11
9F:→ Equalmusic:不用 for 是因为其实次数是未知, 只是刚好因为上一题 11/15 13:12
10F:→ Equalmusic:所以我才知道次数, 算是偷吃步, 等这部份修正之後要改 11/15 13:12
11F:→ Equalmusic:回来...用未知的算法... 11/15 13:12
12F:推 StubbornLin:我比较喜欢一般的鸡块 11/15 14:32
13F:→ KSJ:我比较想知道怎麽知道50後就没了的想法@_@a 11/15 14:40
14F:→ DigiPrince:可以用归纳法证明,只要有连续 6 个可以组出的整数, 11/15 16:55
15F:→ DigiPrince:之後的所有整数都可以被组出来。 11/15 16:56
16F:→ DigiPrince:我比较想知道一般的鸡块跟麦克鸡块差别在哪? XDDDDD 11/15 16:59
17F:→ StubbornLin:麦克鸡块应该是用肉浆去做出来的吧 = = 11/15 17:51
18F:→ uranusjr:看到这问题就让我想起当初学演算法的时光... 11/22 02:00
19F:→ uranusjr:不过那时候要解的好像是背包问题, 比这个麻烦XD 11/22 02:01