题目:题目来源
反思收获:利用Java实现这个解题的过程中,思路还算比较清晰,就是创建类的数组时,忘记给数组的元素开辟空间了(其实这个地方可以用两个数组来代替),导致出了一点小问题。Java还是比较好用的,细节加熟练,保持这份热爱吧。
以下为代码:
/*
* 日期:2020.02.16
* 作者:城主
* 题目:洛古普及题-玩具的谜题
* 思路:先保存小人个数和指令数,利用类数组保存小人的转向和名字,
* 而后通过每次指令的输入来循环判断,而后确定输出小人的职业
*/
import java.util.Scanner;
class doll
{
int dir;//方向
String name;//职业
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int dollnum=scan.nextInt();
int ordernum=scan.nextInt();
doll array[]=new doll[dollnum];
for(int i=0;i<dollnum;i++)
{
array[i]=new doll();
array[i].dir=scan.nextInt();
array[i].name=scan.next();
}
int target=0;//标记当前位置
for(int i=0;i<ordernum;i++)
{
int orderdir=scan.nextInt();//当前指令的方向
int num=scan.nextInt();//要数的人数
//对指令进行的处理,注意小人是按逆时针排序
//当前小人朝里并向左数
if(array[target].dir==0&&orderdir==0) target=(target+dollnum-num)%dollnum;
//当前小人朝里并向右数
else if(array[target].dir==0&&orderdir==1) target=(target+num)%dollnum;
//当前小人朝外并向左数
else if(array[target].dir==1&&orderdir==0) target=(target+num)%dollnum;
//当前小人朝外并向右数
else target=(target+dollnum-num)%dollnum;
}
System.out.println(array[target].name);
}
}