小葱有一面由 块砖排成一行形成的墙,砖块有黑白两种颜色。 小葱心目中的墙是黑白两种砖块交替构成的,于是她要把现在的墙进行改造。 每一次修改可以把任意一块砖块的颜色反转(即白变黑或黑变白),请你帮小葱算算至少需要多少次修改才能把现在的墙修改为小葱心目中的墙。的代码
时间: 2023-05-27 10:07:35 浏览: 294
思路:分别计算将墙变为“黑白交替”的情况和将墙变为“白黑交替”的情况需要修改的次数,取两者中的较小值。
代码实现:
```python
def modify_wall(wall):
# 将墙变为“黑白交替”的情况需要修改的次数
modify1 = 0
for i in range(len(wall)):
if i % 2 == 0 and wall[i] == 'B':
modify1 += 1
elif i % 2 == 1 and wall[i] == 'W':
modify1 += 1
# 将墙变为“白黑交替”的情况需要修改的次数
modify2 = 0
for i in range(len(wall)):
if i % 2 == 0 and wall[i] == 'W':
modify2 += 1
elif i % 2 == 1 and wall[i] == 'B':
modify2 += 1
return min(modify1, modify2)
```
相关问题
小葱有一面由n块砖排成一行形成的墙,砖块有黑白两种颜色。 小葱心目中的墙是黑白两种砖块交替构成的,于是她要把现在的墙进行改造。 每一次修改可以把任意一块砖块的颜色反转(即白变黑或黑变白),请你帮小葱算算至少需要多少次修改才能把现在的墙修改为小葱心目中的墙。
思路:分别计算把当前墙变成以黑色为开头和以白色为开头需要的修改次数,取两者的最小值即可。
具体实现:
1. 以黑色为开头的修改次数:分别计算奇数位置和偶数位置上的不同颜色砖块数量,取两者之和即为需要修改的次数。
2. 以白色为开头的修改次数:同上,只是计算顺序相反。
3. 取两者的最小值。
代码如下:
def min_step(n, bricks):
odd_black = 0 # 奇数位置上黑色砖块数量
even_black = 0 # 偶数位置上黑色砖块数量
odd_white = 0 # 奇数位置上白色砖块数量
even_white = 0 # 偶数位置上白色砖块数量
for i in range(n):
if i % 2 == 0: # 偶数位置
if bricks[i] == 'B':
even_black += 1
else:
even_white += 1
else: # 奇数位置
if bricks[i] == 'B':
odd_black += 1
else:
odd_white += 1
# 以黑色为开头的修改次数
step1 = odd_white + even_black
# 以白色为开头的修改次数
step2 = odd_black + even_white
return min(step1, step2)
n = int(input())
bricks = input().strip()
print(min_step(n, bricks))
小葱要在一个数组中查找一个值,小葱对这个值的有一个预期的位置,所以如果有多个值满足要求,我们需要取距离预期位置最近的值。 如果存在两个位置距离相同,我们取下标更大的位置。
以下是小葱的代码实现:
```python
def search_value(arr, target, expected_index):
# 初始化最小距离和最小距离的下标
min_distance = float('inf')
min_index = -1
for i in range(len(arr)):
# 如果当前值等于目标值
if arr[i] == target:
# 计算距离预期位置的距离
distance = abs(i - expected_index)
# 如果距离更小或者距离相同但下标更大,则更新最小距离和最小下标
if distance < min_distance or (distance == min_distance and i > min_index):
min_distance = distance
min_index = i
# 如果找到了符合条件的值,则返回该值,否则返回None
if min_index != -1:
return arr[min_index]
else:
return None
```
使用示例:
```python
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
target = 3
expected_index = 2
result = search_value(arr, target, expected_index)
print(result) # 输出3
```
在上面的例子中,目标值为3,预期位置为2,数组中有多个值等于3,但距离预期位置最近的是下标为2的位置,因此返回值为3。
阅读全文