【模拟与高精度】【JAVA】P1563 [NOIP2016 提高组] 玩具谜题

点击原题目

题意:模拟寻找眼镜的过程,通过小人的面向和提供的指令寻找眼镜。
思路:

存放数据通过两个String数组实现 通过题上给出的条件可以总结以下结论
1.小人朝向圈内,左边是顺时针方向
2.小人朝向圈内,右边是逆时针方向
3.小人朝向圈外,左边是顺时针方向
4.小人朝向圈外,右边是逆时针方向
寻找眼镜的指令就这四种情况,但是通过观察可以发现,其中的1、3可以合并2、4也可以合并 这样就是两种情况了。
1.圈内左边和圈外右边为顺时针,也就是小人朝向为0指令为0 和小人朝向为1 指令为1
2.圈内右边和圈外左边为逆时针 0 1和1 0
条件判断已经有了,接下来就是如何处理数据 因为数组的下标从0开始,而小人的位置是从1开始,所以这里为了统一,就把小人的位置也从0开始

对于顺时针移动的理解:倒着走i个单位,相当于正着走n-i个单位,把当前位置结合起来就是(当前位置+n-i)
顺时针:(当前指向小人的位置+小人个数-移动长度)% 小人个数
逆时针:(当前小人位置+移动长度)%小人个数

package LOQ.模拟与高精度;

import java.util.Scanner;

public class P1563_2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        String[] pepos = new String[n]; //小人个数及朝向
        String[] orders = new String[m];  //指令
        sc.nextLine();  //吃掉回车符
        int index = 0;    //记录当前指向小人坐标
        for (int i = 0; i < n; i++) {
            pepos[i] = sc.nextLine();
        }
        for (int i = 0; i < m; i++) {
            orders[i] = sc.nextLine();
        }

        for (int i = 0; i < m; i++) {
            String[] temp = pepos[index].split(" ");  //从第一个小人开始
            String[] order = orders[i].split(" ");    //获取指令
            //顺时针
            if ((order[0].equals("0") && temp[0].equals("0")) || (order[0].equals("1") && temp[0].equals("1"))) {
                index = (index + n - Integer.parseInt(order[1])) % n;
            } else {    //逆时针
                index = (index + Integer.parseInt(order[1])) % n;
            }
        }
        String[] res = pepos[index].split(" ");
        System.out.println(res[1]);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值