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

相关推荐

不愿透露姓名的神秘牛友
07-10 11:27
明天又是董事长面,啥时候是个头啊
在太阳里长大的人:公司就仨人吧😂
点赞 评论 收藏
分享
酷酷我灵儿帅:这去不去和线不线下面说实话没啥关系
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务