题解 | #MP3光标位置#

MP3光标位置

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

'''
这题俺用的想法可能比较笨,纯条件语句_(¦3」∠)_,但一定是最清楚的
------
1    |
------
2    |
------
3    |->上框位置sk
------
4    |->光标位置gb
------
5    |
------
6    |->下框位置xk
------
7    |
------
8    |
------
'''
music_lt=[]# 创建音乐曲目列表
for i in range(1,int(input())+1):
    music_lt.append(i)
sk=0# 上框位置
if len(music_lt)>4:
    xk=3# 下框位置
elif len(music_lt)<=4:
    xk=len(music_lt)-1# 下框位置
gb=0# 光标位置

def ud1(w,s,x,g):# 曲目列表小于等于4时,只需改变光标位置,执行函数ud1
    if w=='U':
        if s<g<=x:
            g=g-1
        elif g==0:
            g=len(music_lt)-1
    elif w=='D':
        if s<=g<x:
            g=g+1
        elif g==len(music_lt)-1:
            g=0
    return s,x,g

def ud2(w,s,x,g):## 曲目列表大于4时,上框、下框、光标均可能改变执行函数ud2
    if w=='U':# 向上
        if s<g<=x:# 光标未到上框位置
            g=g-1
        elif g==s:# 光标到上框位置
            if g==0 and s==0:# 若是曲目列表顶端
                g=len(music_lt)-1
                s=len(music_lt)-4
                x=len(music_lt)-1
            else:# 若不是曲目列表顶端
                s=s-1
                g=g-1
                x=x-1
    elif w=='D':# 向下
        if s<=g<x:# 光标未到下框位置
            g=g+1
        elif g==x:# 光标到下框位置
            if g==len(music_lt)-1 and x==len(music_lt)-1:# 若是曲目列表底端
                g=0
                s=0
                x=3
            else:# 若不是曲目列表底端
                s=s+1
                g=g+1
                x=x+1
    return s,x,g

cz=input()# 操作的字符串
if len(music_lt)<=4:# 曲目列表小于等于4时
    for word in cz:
        sk,xk,gb=ud1(word, sk, xk, gb)
else:# 曲目列表大于4时
    for word in cz:
        sk,xk,gb=ud2(word, sk, xk, gb)

lt=[]
for k in music_lt[sk:xk+1]:
    lt.append(str(k))
print(' '.join(lt))# 输出当前列表

print(music_lt[gb])# 输出当前选中歌曲
    
华为机试题——中等难度 文章被收录于专栏

华为机试题练习记录

全部评论

相关推荐

头像
08-23 22:25
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务