一、题目描述
二、题解
1.解题思路与方法
需要考虑的有几个点,第一:该怎么存储题目描述的环形结构? 这个问题非常简单,使用数组存储即可,当计算数值超出数组范围时,将计算数值对数组长度取模“ % ”操作即可。第二:该怎么实现对目标的查找?当小人朝向不同时相应的移动方向也不一样,当小人朝内时:向右寻找,对应数值应减少;相反向左寻找则数值应增加。当小人朝外时:向右寻找,对应数值应增加;相反向左寻找则数值应减少。
实现过程中将上面的问题实现即可,使用两个相同长度的数组tw[ ]和ca[ ]分别存储对应的朝向和职业,在每次指令的输入之后立刻计算答案ans的值,输入完成后即答案计算完毕。对目标的查找,根据上述规律,且题目说明:小人朝内为0,朝外为1;向右为0,向左为1。可以总结出:当ans对应小人的朝向的值和代表向哪个方向寻找的值相等时,ans应减少 ;否则ans应增加。由此可以快速解决该题。
2.code
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //行数
int m = sc.nextInt(); //指令数
int[] tw = new int[n]; //朝向数组,0朝内,1朝外
String[] ca = new String[n]; //职业数组
for(int i=0;i<n;i++){
tw[i]=sc.nextInt();
ca[i]=sc.next();
}
int ans=0;
for(int i=0;i<m;i++){
int a = sc.nextInt(); //向哪数
int s = sc.nextInt(); //多少人
ans = tw[ans]==a?(ans+n-s)%n:(ans+n+s)%n; //判断具体该加还是减
}
System.out.print(ca[ans]); //输出ans对应职业
sc.close();
}
}