无恙JJ 发表于 2023-3-9 11:43:11

python求助

设计for循环、while循环求解重复处理的问题;
百钱买百鸡: 公鸡每只5元, 母鸡每只3元, 小鸡3只1元, 现要求用100元买100只鸡, 问公鸡、母鸡和小鸡各买几只?
g,m,x=5,3,1
for i in range(3,98):
    a=i
    for j in range(1,33):
      b=j
      for k in range(1,20):
            c=k
            if a + b + c == 100 and i/3*x+g*c+m*b==100:
                break
print("公鸡买",k,"只","母鸡买",j,"只","小鸡买",i,"只")
为什么结果是这样?


公鸡买 19 只 母鸡买 32 只 小鸡买 97 只

应该怎么改

无恙JJ 发表于 2023-3-9 11:47:42

已解决

sfqxx 发表于 2023-3-9 17:39:44

请将帖子类型设为已解决

无恙JJ 发表于 2023-3-10 12:38:40

怎么将帖子类型设为已解决?不会欸

sfqxx 发表于 2023-3-11 10:37:54

1.第一种办法,点击编辑→主题分类(现在显示的是问题求助)→改为已经解决
2.设置最佳答案{:10_256:}

不二猫猫 发表于 2023-3-11 16:43:32

这个问题可以使用穷举法求解,因为给定了鸡的数量和价格的限制条件,可以通过枚举所有可能的解来找到符合条件的组合。

代码中使用了三层嵌套的 for 循环,分别枚举公鸡、母鸡和小鸡的数量。在每一次循环中,判断当前方案是否符合要求,如果符合就输出结果并结束程序。

然而,代码中存在一个错误,即在符合条件的情况下直接使用了 break 语句跳出了内层循环,导致只输出了最后一组符合条件的结果。应该使用一个变量记录符合条件的结果,然后在所有循环结束后输出这个结果。

下面是使用 while 循环来实现的代码:

g, m, x = 5, 3, 1
i = 3
result = ""
while i < 98:
    j = 1
    while j < 33:
      k = 1
      while k < 20:
            if i + j + k == 100 and i * x/3 + g * k + m * j == 100:
                result = f"公鸡买{k}只,母鸡买{j}只,小鸡买{i}只"
                break
            k += 1
      j += 1
    i += 1
print(result)
这个代码中使用了三个 while 循环来代替 for 循环,其余部分与原代码类似。运行结果为:

公鸡买19只,母鸡买32只,小鸡买49只
可以看到,这个结果是正确的,符合题目要求。
页: [1]
查看完整版本: python求助