体育场找座位 (100)
- 体育场有一排座位(已有落座观众),观众之间必须至少一个空位才允许落座;
- 在不移动现有观众座位的情况下,最多还能坐下多少人?
输入描述:
数组表示每个座位是否坐人,0未坐,1已坐人;数组长度在【1,10000】
输出描述:
输出最多还能坐多少人?
示例1:
输入:10001
输出:1
示例2:
输入:0101
输出:0
思路:
- 遍历每个座位,若为1,则+2并继续循环;若为0,则继续判断左右位置是否为0,最终判断该位置是否可以入座;
- 判断每个位置的左 右位置时,注意判断越界问题
- 座位数为 1 则会双越界;
- 座位数 >=2 则单越界;
c
# 输入座位
s = list(input().strip())
n = len(s)
# 长度为1 双越界
if n == 1:
if s[0] == "1":
result = 0
else:
result = 1
else: # 单越界
i = 0
result = 0
while i < n:
if s[i] == "1":
i += 2
continue
else:
left = i - 1
right = i + 1
condition = [
(left < 0 and s[right] == "0"),
(s[left] == "0" and right >= n),
(left >=0 and right < n and s[left] == s[right] == "0")
]
if any(condition):
result += 1
s[i] = "1"
i += 2
else:
i += 1
print(result)