记阿里2021实习生春招笔试题

第一题

题目大意:告诉你一个二维表格,代表的是城市正交型的交通网络,@表示起始点,字符’.'表示可以通过,字符#表示不痛。一个罪犯开着车在逃跑,这个车只要前面是通路就不会拐弯,当此路不通或者到了城市的边缘就会拐弯。共有k次拐弯后,问现在罪犯所在的位置?

输入描述:

3 4 4 //分别表示二维表m*n,以及拐弯次数
@…
.#…
…# //以上m行表示的城市道路通不通,@当作通路看
EAST
SOUTH
WEST
NORTH //以上k行表示拐弯的方向

输出描述:

1 3 //表示在第一行第三列的位置

我的代码:

import java.util.Arrays;
import java.util.Scanner;

public class Solution1 {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
    
    
            int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::valueOf).toArray();
            int row = nums[0];
            int col = nums[1];
            int k = nums[2];
            char[][] chars = new char[row][col];
            // 记录初始位置
            int initRow = 0, initCol = 0;
            for (int i = 0; i < row; i++) {
    
    
                char[] charArray = sc.nextLine().toCharArray();
                for (int j = 0; j < charArray.length; j++) {
    
    
                    if (charArray[j] == '@') {
    
    
                        initRow = i;
                        initCol = j;
                    }
                    chars[i][j] = charArray[j];
                }
            }
            // 开始走位置
            for (int i = 0; i < k; i++) {
    
    
                String direct = sc.nextLine();
                if ("EAST".equalsIgnoreCase(direct)) {
    
    
                    while (initCol < col && chars[initRow][initCol] != '#') initCol++;
                    initCol--; // 0, 3
                } else if ("SOUTH".equalsIgnoreCase(direct)) {
    
    
                    while (initRow < row && chars[initRow][initCol] != '#') initRow++;
                    initRow--; // 1, 3
                } else if ("WEST".equalsIgnoreCase(direct)) {
    
    
                    while (initCol >= 0 && chars[initRow][initCol] != '#') initCol--;
                    initCol++; // 1, 2
                } else {
    
    
                    while (initRow >= 0 && chars[initRow][initCol] != '#') initRow--;
                    initRow++; // 0, 2
                }
            }
            System.out.println((initRow + 1) + " " + (initCol + 1));
        }
    }
}

第二题

题目大意:小明和他的两个朋友玩游戏。现在有n个物品(n是3的倍数),每一个物品都有相应的价值,n个物品围成一个圆圈。现在游戏规则如下:
1)每次小明拿了一个物品之后,朋友1就拿走该物品逆时针方向的第一个,朋友2拿走该物品顺时针方向的第一个
现在小明想知道他能拿到的物品价值之和最大是多少?

输入输出都很简单,就一行表示n个物品的价值

我的代码:
这一题没有完全写完。因为第一题花了40分钟,把字符常量写错了,“WEST”写成“WETS”,花了时间去debug才找到问题出在哪里。

猜你喜欢

转载自blog.csdn.net/weixin_42541360/article/details/114628022
今日推荐