[关闭]
@yexiaoqi 2022-05-20T16:38:36.000000Z 字数 982 阅读 455

HJ64. MP3光标位置

刷题


题目:大意是 mp3 屏幕最多显示 4 首歌曲,输入歌曲数量、一串由'U'、'D'组成的命令进行控制,输出屏幕显示的列表和当前歌曲。
链接https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15


只保存屏幕上第一首歌曲,后面的歌曲通过计算而得。代码很多,但思路清晰

  1. public class Main {
  2. public static void main(String[] args){
  3. Scanner sc = new Scanner(System.in);
  4. while(sc.hasNext()){
  5. int n = sc.nextInt();
  6. String cmd = sc.next();
  7. show(n, cmd);
  8. }
  9. }
  10. public static void show(int n, String cmd){
  11. int first = 1;
  12. int cur = 0;
  13. //读取命令执行
  14. for(int i=0; i<cmd.length(); i++){
  15. char c = cmd.charAt(i);
  16. if(n <= 4){
  17. if(cur==0 && c=='U') cur=n-1;
  18. else if(cur==n-1 && c=='D') cur=0;
  19. else if(c=='U') cur--;
  20. else if(c=='D') cur++;
  21. } else {
  22. if(cur==0 && first+cur==1 && c=='U') {
  23. first=n-3;//更新屏幕
  24. cur=3;
  25. } else if(cur==3 && first+cur==n && c=='D'){
  26. first=1;//回到第一屏
  27. cur=0;
  28. } else if(cur==0 && c=='U') {
  29. first-=1;//列表向上移动一个
  30. } else if(cur==3 && c=='D') {
  31. first+=1;//列表向下移动一个
  32. } else if(c=='U') cur--;
  33. else if(c=='D') cur++;
  34. }
  35. }
  36. StringBuilder list = new StringBuilder();
  37. int m = n>4 ? 4 : n;
  38. for(int i=0; i<m; i++){
  39. list.append(first+i).append(" ");
  40. }
  41. System.out.println(list.toString().trim());
  42. System.out.println(first+cur);
  43. }
  44. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注