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


全部评论

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
HNU_fsq:建议直接出国,这简历太6了。自愧不如
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务