丢番图方程c语言114,丢番图方程的实现

问题是什么似乎很清楚:只有在可能得到确切数量的情况下,才增加count。任何时候不递增count都会将其重置为0,并且循环仅在超过6时停止。那可能需要一段时间。在

您编写了一个三重嵌套的for循环,因此n越大,这些循环就越慢。如果你让它运行足够长的时间,它可能会成功并在某一天完成;但是你的基本算法太慢了。在

您可以通过使用print语句插入循环来了解更多信息。当我尝试它时,我没有得到输出;我认为这可能是由于缓冲问题,所以我编写了一个简单的输出函数,它输出一个字符串,然后刷新以确保我可以立即看到输出。在

这是你编辑的程序:import sys

def out(s):

sys.stdout.write(s + "\n")

sys.stdout.flush()

count = 0

n = 1

while count < 6:

six_consecutive = True

for a in range(n):

for b in range(n):

for c in range(n):

#out("a: %d b: %d c: %d n: %d" % (a, b, c, n))

if 6*a + 9*b + 20*c == n:

six_consecutive = False

out("n == %d count == %d six_consecutive == %s" %

(n, count, str(six_consecutive)))

if six_consecutive:

count += 1

else:

count = 0

n += 1

print("Largest number of McNuggets that cannot be bought in exact quantity: %d." % (n - 5))

我还修正了“六连”的拼写。在

那么,你该怎么解决这个问题呢?我认为你应该扔掉这个,用更好的算法重写。你可能想看看其他人是如何解决这个问题的,或者类似的问题的。在我看来,这与一组不同面额的硬币非常相似,即如何进行兑换。在

注:经典的兑换问题通常假设一组合理的硬币,包括价值为1的硬币。一个简单的“贪心”算法,从最大的硬币开始,一直到最后,都会成功。这有点有趣,因为“硬币”的设置很奇怪,而且有些值找不到,所以也许经典的硬币问题并不像我想的那样相关。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值