【蓝桥杯】【python】扫地机器人-烂尾楼+1

问题描述

【蓝桥杯】【python】扫地机器人-烂尾楼+1_第1张图片

算法思路

Q :**已清洁区域的边界。**以最左边作为基准,已经打扫好的区域数量,在最开始时候定义为 0。
T :**扫地机器人用时。**所以对于每个机器人来说,它的最大清洁范围就是左右两边的 (T / 2)的距离之内。
x : 机器人当前的坐标。

首先判断:

x - (T / 2) < Q

也就是说机器人的左清洁范围要在边界左边,不然就直接退出

然后判断下来对于某个机器人,共有如下几种情况:

1 机器人位置在边界右边,所以此时需要更新边界的范围,将边界更新到机器人打扫的右边界:

Q = x + (T / 2)

2 机器人位置在边界右边将边界更新到

Q = x + (T / 2)

所以在两种情况下,机器人都是运行到那个位置

踩坑

时间的话,一增加就是两倍的关系,不如范围好控制,所以在后面把时间 T 改为 Scope这么一个范围的关系

源代码

def judge(Left_border, Scope):

    for i in range(Number_machine):

        if(position_machine[i] - Scope <= Left_border):
            if(position_machine[i] <= Left_border):
                Left_border = position_machine[i] + Scope - 1
            else:
                Left_border = Scope + Left_border
        else:
            return(0)

    if(Left_border < Number_area):
        return(0)
    else:
        return(1)

# main
global Left_scope
(Number_area, Number_machine) = map(int, input().split())
position_machine = [0 for _ in range(Number_machine)] 

for i in range(Number_machine):
    temp = int(input())
    position_machine.append(temp)
position_machine.sort()

if((Number_area / Number_machine) >= position_machine[0]):
    Scope = int(Number_area / Number_machine)
else:
    Scope = position_machine[0]

for i in range(Scope, Number_area + 1):
    Left_border = 0
    if(judge(Left_border, i) == 1):
        print(2 * (i - 1))
        break

来火了

这是为什么呀,我到底问题出在哪里,真心烦躁

你可能感兴趣的:(蓝桥杯,蓝桥杯,python,职场和发展)