题解 | #MP3光标位置#

MP3光标位置

http://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15

第一种方法似乎比第二种简单,第一种方法只生成必要的列表,第二种却老实巴交一开始就生成了完整歌曲列表

while True:
    try:
        # 获取歌曲数量
        n1 = int(input())
        # 获取指令
        cmds = input()
        # 构建字典
        dic = {'D': +1, 'U': -1}
        # 设置计数器,用于记录光标的位置
        num = 1
        # 定义空数组用于存储输出列表
        res = []
        if n1 <= 4: #小于等于4首最简单,直接输出
            res = [n for n in range(1, n1 + 1)]  # 生成歌曲列表1234
            for cmd in cmds:
                num = num + dic[cmd]
                if num == 0:
                    num = n1
                elif num == n1 + 1:
                    num = 1
        if n1 > 4:
            # 记录当前窗口的头尾值
            first = 1
            end = 4
            for cmd in cmds:
                num = num + dic[cmd]
                if num == 0:  # 往上越界
                    num = n1  # 穿越上边界则到达下边界
                    first = n1 - 3  # 切换窗口列表的起始和结束
                    end = n1
                elif num == n1 + 1:  # 往下越界
                    num = 1  # 越过下边界则到达上边界
                    first = 1  # 切换显示窗口
                    end = 4
                # 以上是边界特殊情况,以下是常规
                elif num == first - 1:  # 平滑上滚
                    first = first - 1
                    end = end - 1
                elif num == end + 1:  # num==5,则平滑下滚
                    end = end + 1  # 平滑下滚
                    first = first + 1
                elif first <= num <= end:  # 该句为防意外,可删除
                    continue
            res = [k for k in range(first, end + 1)]  # 形成窗口的列表
        # 输出结果
        print(' '.join(str(ans) for ans in res))
        print(num)
    except:
        break

第二种:

while True:
    try:
        n = int(input())
        actions = input()
        act_dict = {'U':-1,'D':1} #字典操作加减
        songs = [str(x) for x in range(1,n+1)] #一开始就生成完整的歌曲列表
        start = 0 #歌曲列表中第1个歌曲切片位置
        end = 4   #歌曲列表中第4个歌曲切片位置(不含)
        ptrGlobal = 1 #光标在歌曲列表中序号(全局指针)
        ptrLocal = 1 #光标在当前屏幕上序号(局部指针)
        if n <= 4:  #不大于4首最简单,只考虑一个序号就够了
            for i in actions:
                ptrGlobal += act_dict[i]
                if ptrGlobal < 1:
                    ptrGlobal = n
                if ptrGlobal > n:
                    ptrGlobal = 1
            else:
                print(' '.join(songs))
                print(ptrGlobal)
        else:  #大于4首稍复杂,要考虑两个序号
            for i in actions:
                ptrGlobal += act_dict[i]
                ptrLocal += act_dict[i]
                if ptrLocal > 4:
                    ptrLocal = 4 #将光标在当前屏幕上序号限定在4以内
                    start += act_dict[i] #小屏幕的起始光标序号要变化
                    end += act_dict[i]
                    if ptrGlobal == n+1: #超出边界要回归
                        ptrGlobal = 1
                        ptrLocal =1
                        start = 0
                        end = 4
                if ptrLocal < 1:
                    ptrLocal = 1
                    start += act_dict[i]
                    end += act_dict[i]
                    if ptrGlobal == 0:  #超出边界要回归
                        ptrGlobal = n
                        ptrLocal = 4
                        start = n-4
                        end = n
            else:
                face = songs[start:end]#小屏幕歌曲范围
                print(' '.join(face))
                print(ptrGlobal) #打印全局指针
    except:
        break
全部评论

相关推荐

工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
走不到的路就这样算了吗:大佬硬气
点赞 评论 收藏
分享
评论
1
2
分享
牛客网
牛客企业服务