美文网首页
矩形游戏-(字节跳动2018)

矩形游戏-(字节跳动2018)

作者: 天使的流浪 | 来源:发表于2019-01-25 16:29 被阅读0次

    题目:小a在玩一个很简单的游戏,游戏的内容是控制一个小人在一块矩形的空地内走,一旦小人走出矩阵范围,游戏就失败。游戏机有上,下,左,右四个按键,每按一下小人就向相应的方向走一步。这个游戏过于简单,小a说:“这种游戏我闭着眼睛玩都输不了”。于是他便闭上眼睛,进行一连串的操作。但若他中途输了的话就会停止。
    那么问题来了:给定小a的操作,进行Q次询问,你能算出每次询问小人能走多少步吗。
    输入描述:
    第一行为长度L的字符串S,每个字符依次代表小a的一次操作。’u’代表向上,’d’代表向下,’l’代表向左,’r’代表向右。字符串S不会包含其他字符。
    第二行是整数Q,代表Q次询问
    接下来Q行,每行有四个整数,N,M,X,Y,保证1<=X<=N,1<=Y<=M,矩阵大小为N*M,小人初始位置为(X, Y)。
    输出描述:
    每次询问打印一个整数s(单独一行),代表小人所走的步数;
    输入:
    uuurrdddddl
    3
    5 6 3 3
    5 6 4 2
    6 6 4 2
    输出:
    3
    10
    11
    分析:
    1.行走的描述
    'u':向上,x--; 'r':向右,y++;
    'd':向下,x++; 'l':向左,y--;
    2.边界的检查
    N(矩形大小的横坐标),M(矩阵大小的纵坐标),X(初始位置的横坐标),Y(初始位置的纵坐标)
    X>N || Y>M || X<1 || Y<1
    3.数据的存储
    如何存储行走的步骤?
    如何存储每次询问数据?
    如何存储结果数据?
    代码实现:

    package com.bj.zijietiaodong;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class Test2 {
        // 判断当前位置是否是合法的坐标
        public static boolean checkVaild(int data_x, int data_y, int x, int y){
            boolean flag = true;
            // 根据边界判断是否有效
            if (x>data_x || y>data_y || x<1 || y<1) {
                flag = false;
            }
            return flag;
        }
        //模拟实现行走
        private static int stempNum(int data_x, int data_y, int x, int y, String str) {
            if (str.length()==0) return 0;
            int step_num = 0;
            for (int i = 0; i < str.length(); i++) {
                if (checkVaild(data_x,data_y,x,y)) {
                    step_num++;
                    // 根据每一次行走修改位置
                    if (str.charAt(i)=='u') {
                        x--;
                    }else if (str.charAt(i)=='r') {
                        y++;
                    }else if (str.charAt(i)=='d') {
                        x++;
                    }else if (str.charAt(i)=='l') {
                        y--;
                    }else {
                        System.out.println("输入字符为非法字符!");
                        return 0;
                    }
                }else {
                    return step_num;
                }
            }
            return step_num;
        }
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            //1.存储字符串
            String str = scan.nextLine();
            //2.存储Q次询问
            int num = Integer.parseInt(scan.nextLine());
            //3.存储Q次询问的结果(先以num=1实现)
            List<String> list_data = new ArrayList<>();
            for (int i = 0; i < num; i++) {
                list_data.add(scan.nextLine());
            }
            //4.分别调用函数,存储结果值
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < list_data.size(); i++) {
                list.add(stempNum(Integer.parseInt(list_data.get(i).split(" ")[0]),Integer.parseInt(list_data.get(i).split(" ")[1]),
                        Integer.parseInt(list_data.get(i).split(" ")[2]),Integer.parseInt(list_data.get(i).split(" ")[3]),str));
            }
            scan.close();
            for (int j = 0; j < list.size(); j++) {
                System.out.println(list.get(j));
            }
        }
    }
    

    结果

    uuurrdddddl
    3
    5 6 3 3
    5 6 4 2
    6 6 4 2
    3
    10
    11
    

    知识点:
    1.集合的使用,如List,ArrayList等;
    2.字符串的灵活处理;

    相关文章

      网友评论

          本文标题:矩形游戏-(字节跳动2018)

          本文链接:https://www.haomeiwen.com/subject/rafvjqtx.html