洛谷-P1563

 一、题目描述

二、题解

 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();
    }
}

​

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值