牛客网算法练习--[编程题]迷路的牛牛 java实现

今天开始练习一下算法和mysql等题目,增加一下自己的算法能力。

链接:https://www.nowcoder.com/questionTerminal/fc72d3493d7e4be883e931d507352a4a?toCommentId=6159662
来源:牛客网
 

[编程题]迷路的牛牛

  • 热度指数:43429 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他。

输入描述:

每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。
接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。


 

输出描述:

输出牛牛最后面向的方向,N表示北,S表示南,E表示东,W表示西。

示例1

输入

3
LRR

输出

E
package com.shengxi.niuke;

import java.util.Scanner;

/**
 * 使用两个枚举类,分别作为左右转和方向的变量。
 * 这里可以直接使用静态变量,或者数组进行变量储存。本人使用枚举只是因为想练习一下枚举的使用。
 * 然后计算出左转和右转的数量,相减抵消,剩下的就是最后的转动次数
 *
 * @author yan
 */
public class Day001 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //个数
        int count = scanner.nextInt();
        String line = scanner.next();
        char[] chars = line.toCharArray();
        int lNum = 0, rNum = 0;
        for (char aChar : chars) {
            if (aChar == TurnEnum.L.getValue()) {
                lNum++;
            } else {
                rNum++;
            }
        }
        /**因为我使用的右转作为标准,这里有一个难点就是负数的求模也是负数,所以需要加上一个模*/
        int result = (rNum - lNum) % 4;
        if (result < 0) {
            result += 4;
        }
        printf(result);
    }

    /**
     * 输出
     */
    public static void printf(int result) {
        //利用switch输出,原因有两个。一个是switch更加明了,第二个是因为练习枚举的使用.
        switch (Direction.getByValue(result)) {
            case E:
                System.out.println(Direction.E);
                break;
            case N:
                System.out.println(Direction.N);
                break;
            case S:
                System.out.println(Direction.S);
                break;
            case W:
                System.out.println(Direction.W);
                break;
            default:
                break;
        }
    }


    /**
     * 方向
     * 默认0,1,2,3
     */
    private enum Direction {
        E(1),
        S(2),
        W(3),
        N(0);

        private final int value;

        Direction(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }

        public static Direction getByValue(int value) {
            for (Direction d :
                    values()) {
                if (d.getValue() == value) {
                    return d;
                }
            }
            return null;
        }
    }

    /**
     * 左转右转枚举
     */
    private enum TurnEnum {
        L('L'), R('R');

        private final char value;

        TurnEnum(char value) {
            this.value = value;
        }

        public char getValue() {
            return value;
        }
    }
}

如果有更好的方案或者不明白的可以讨论一下哦!

猜你喜欢

转载自blog.csdn.net/mathew_leung/article/details/106184462