import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { static int idx=1;//当前选中的编号 static int row=1;//当前行号 public static void main(String[] args) { Scanner in = new Scanner(System.in); int n=in.nextInt();//当前选中的 in.nextLine(); String cmd=in.nextLine();//UD命令 //需要计算当前列表,即显示的四条歌曲,当前选中的歌曲 //那么就需要判断当前是在哪一页,哪一行 char[] cc=cmd.toCharArray(); int m=cc.length;//命令长度 for(int i=0;i<m;i++){ move(n,Main.idx,Main.row,cmd.charAt(i)); } //输出结果 for(int i=Main.row;i>0;i--){ System.out.print(1+Main.idx-i); System.out.print(" "); } for(int i=Main.row+1;i<=Math.min(4,n);i++){ System.out.print(Main.idx+i-Main.row); System.out.print(" "); } //输出行号 System.out.println(); System.out.println(Main.idx); } //只要知道move后的行号和选中的编号,就可以输出结果了 static void move(int n,int idx, int row,char action){ //idx 当前编号 //row 当前行号 //操作 if(action=='U'){ //向上移动 //先按照row来划分 if(row==1){ //第一行, 再看编号,如果是第一首 if(idx==1){//当前就是编号1, 这种情况要跳到最后一页的最后一条 Main.idx=n;//最后一首 if(n<4)Main.row=n;//最后一行 if(n>=4)Main.row=4; }else{ //编号不是1 Main.idx-=1;//编号减一 Main.row=1;//行号不变 } }else{//row>1; Main.idx-=1; Main.row-=1; } }else{ //向下移动 //向下移动,最后一行 if(n>4){ if(row==4){ //最后一个数 if(idx==n){ Main.idx=1;//回到第一首 Main.row=1; }else{ //并非最后一首, 则行号不变,编号加1 Main.idx+=1; } }else{ Main.idx+=1; Main.row+=1; //向下移动 } }else{ //此时,n<4 if(row==n){//这时候idx==n Main.idx=1; Main.row=1; }else{ Main.idx+=1; Main.row+=1; } } } } }
读懂题非常重要,思考这个函数的输入和输出,我们要记录什么