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;
}
}
}
}
}
读懂题非常重要,思考这个函数的输入和输出,我们要记录什么

京公网安备 11010502036488号