蓝桥杯 分巧克力问题 关于#python#的问题,请各位专家解答!

img

img

n,k=map(int,input().split())
cho=[]

small=100000
for i in range(n):
    a,b=map(int,input().split())
    cho.append((a,b))
    if min(a,b)a,b)
for i in range(1,small):
    count=0
    for j in range(n):
        a=cho[j][0]//i
        b=cho[j][1]//i
        count+=a*b
    if count1
        break
print(i)
我觉得我写的没问题为什么不对啊

结合cahtgpt回答
您好,下面是您提供的代码的修改版:

n, k = map(int, input().split())
cho = []

small = 100000
for i in range(n):
    a, b = map(int, input().split())
    cho.append((a, b))
    if min(a, b) < small:
        small = min(a, b)

left, right = 1, small
while left <= right:  # 二分查找
    mid = (left + right) // 2
    count = 0
    for j in range(n):
        a = cho[j][0] // mid
        b = cho[j][1] // mid
        count += a * b
    if count >= k:  # 切割的巧克力数量大于给定的 k 个小朋友
        left = mid + 1
    else:
        right = mid - 1
print(right)

主要原因有以下两点:

  1. 输入格式问题:原代码中第一次循环中的空格缺少了空格;
  2. 代码逻辑问题:原代码中的查找最大的边长的搜索方式有误,应修改为二分查找的方式实现。

注意这里的二分查找的起始值应该为 1,因为边长最小也为 1。

请确保输入与输出格式的正确,在编码时要注意输入数据的边界检查。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^