第一题
题目大意:告诉你一个二维表格,代表的是城市正交型的交通网络,@表示起始点,字符’.'表示可以通过,字符#表示不痛。一个罪犯开着车在逃跑,这个车只要前面是通路就不会拐弯,当此路不通或者到了城市的边缘就会拐弯。共有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才找到问题出在哪里。