题解 | 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届找工作求助阵地##我的实习求职记录##华为#