题解 | #MP3光标位置#
MP3光标位置
http://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
考虑的边界为左边界与右边界
向左移动的时候,当光标与左边界重合时,此时光标会与左边界一起向左移动;
向右移动的时候,当光标与右边界重合时,此时光标会与右边界一起向左移动;
我们需要判断的时光标的位置,与当前的操作时向左还是向右
def MP3(n,m):
# 光标当前位置
i = 0
# 创建数组存储歌曲
song = [_+1 for _ in range(n)]
# 当歌曲小于等于4时
if n <= 4:
for j in m :
if j == 'U':
i -= 1
if i < 0 :
i = n - 1
if j == 'D':
i += 1
if i > n - 1:
i = 0
# 列表直接输出当前的歌曲列表即可
print(' '.join(str(_) for _ in song))
# 当歌曲大于4时
else:
# 标记初始左边界位置
left = 0
# 标记初始右边界的位置
right = 3
for j in m :
# 向左(向上)
if j == 'U':
i -= 1
# 如果当前值小于0,即光标已经歌曲最后一首
if i < 0 :
i = n - 1
# 左边界跟着改变
left = n - 4
# 右边界即当前i位置
right = i
# 如果左边边界大于等于当前坐标时,
if i <= left :
# 当前位置即左边边界
left = i
# 右边边界则是i+3
right = i + 3
# 向右 (向下)
if j == 'D':
i += 1
# 当光标位于最后一首,再向下选择则返回第一首歌曲,即此时的i大于n-1
if i > n - 1:
# i即为0
i = 0
# 左边边界也是0
left = i
# 右边边界为 i+3
right = i+3
# 当i大于等于右边边界时
if i >= right :
# 此时左边边界则是i-3
left = i - 3
# 向下移动的光标,则此时i的位置则是右边的边界
right = i
# 打印满足歌曲符合左右边界的的歌曲列表
print(' '.join(str(_) for _ in song[left:right+1]))
# 输出当前歌曲
print(song[i])
n = int(input().strip())
m = input().strip()
MP3(n,m)


