wahahaou 2023-03-25 12:41 采纳率: 0%
浏览 45

蓝桥杯 分巧克力问题 关于#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)<small:
        small=min(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 count<k:
        i-=1
        break
print(i)
我觉得我写的没问题为什么不对啊
  • 写回答

2条回答 默认 最新

  • Freshman小姜 2023-03-25 18:32
    关注

    结合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。

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

    评论

报告相同问题?

问题事件

  • 创建了问题 3月25日