题解 | #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)