题解 | Python3简明思路#MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
思路:
- song_num是歌的数量,int类型
- 设置song_lis数组来储存歌的序号,song_lis[0] = 1,一直到song_lis[-1] = song_num
- 设置一个page_lis数组(初始状态[1,0,0,0])来记录某个页面光标的位置
- 用count来索引song_lis的歌曲序号(即song_n,song_n=song_lis[count]),输入U则count-输入,注意count到-song_num清零;D则count+,注意count到song_num清零
- 用mark_n来标记当前光标在页面中的位置,以此为依据判断下一步的操作
- 最后输出时,将page_lis数组编码,规则为当前page_lis.index(1)在哪里,编码后数组哪里就为0,其他元素按等差数列填写。哪个比如page_lis为[0,0,1,0]编码为[-2,-1,0,1]。这一步中page_lis每个元素+song_n就得到最终页面的数组,即第一个输出
Note:
测试中出现了歌曲数目不足4的情况一开始博主没有考虑,被歌曲数为2的用例折磨...所以修改了page_lis的长度,目前它的范围为[1,4],可随输入歌曲数目调整,可解决。
song_num = eval(input())
command_ss = input()
page_lis = []
for i in range(min(song_num,4)):
page_lis.append(0)
page_lis[0] = 1
# now len(page_lis) can vary from 1~4
song_lis = []
for i in range(song_num):
song_lis.append(i+1)
# begin with 1
count = 0
song_n = 1
mark_n = page_lis.index(1)
for comm in command_ss:
if comm =="D":
#make sure mark_n & count is current state
mark_n = page_lis.index(1)
page_edg = min(song_num,4)-1
if mark_n != min(song_num,4)-1:
page_lis[mark_n+1] = 1
page_lis[mark_n] = 0
# move right
elif mark_n == page_edg and song_n !=song_num:
pass #dont move
elif mark_n ==page_edg and song_n == song_num:
page_lis = []
for i in range(min(song_num,4)):
page_lis.append(0)
page_lis[0]=1
count+=1
if count ==song_num:
count = 0
song_n = song_lis[count]
elif comm == "U":
mark_n = page_lis.index(1)
if mark_n != 0:
page_lis[mark_n-1] = 1
page_lis[mark_n] = 0
elif mark_n == 0 and song_n !=1:
pass #dont move
elif mark_n == 0 and song_n == 1:
page_lis = []
for i in range(min(song_num,4)):
page_lis.append(0)
page_lis[min(song_num,4)-1]=1
count-=1
if count ==-song_num: # dont let [-song_num] overlop [0] !
count = 0
song_n = song_lis[count]
out_lis = []
cover_num = page_lis.index(1)
for i in range(min(4,song_num)): #song numbers not reach page name 4!
out_lis.append(str(-cover_num+i+song_n))
print(" ".join(out_lis))
print(song_n)
#23届找工作求助阵地##我的实习求职记录##华为#