藍橋杯-蘭頓螞蟻-未完成解
阿新 • • 發佈:2019-02-02
直接模擬蘭頓螞蟻的行動,按照規則改變
中出了一個bug,正在找到底是哪裡的問題(也許不會去找_(:з」∠)_)
/*未完成 * 題目描述:蘭頓螞蟻 landun 輸入格式 輸入資料的第一行是 m n 兩個整數(3 < m, n < 100),表示正方形格子的行數和列數。 接下來是 * m 行資料。 每行資料為 n 個被空格分開的數字。0 表示白格右轉,1 表示黑格左轉。 接下來是一行資料:x y s k, 其中x * y為整數,表示螞蟻所在行號和列號(行號從上到下增長,列號從左到右增長,都是從0開始編號)。s * 是一個大寫字母,表示螞蟻頭的朝向,我們約定:上下左右分別用:UDLR表示。k 表示螞蟻走的步數。 輸出格式 輸出資料為兩個空格分開的整數 p q, * 分別表示螞蟻在k步後,所處格子的行號和列號。 */ class landun { public static void go(Scanner in) { int l = in.nextInt(); int w = in.nextInt(); boolean[][] map = new boolean[l][w]; for (boolean[] f : map) for (boolean fo : f) fo = in.nextInt() == 0 ? false : true; // 0是false,1是true int x = in.nextInt() - 1; int y = in.nextInt() - 1; String s = in.next(); char ch = s.charAt(0); int face = -1; if (ch == 'L') face = 0; if (ch == 'U') face = 1; if (ch == 'R') face = 2; if (ch == 'U') face = 3; // 0,1,2,3=>左上右下(如果記得mc的資料值就按mc的規則賦值了TAT) int foo = in.nextInt(); for (int i = foo; i > 0; i--) { // System.out.println((x + 1) + "," + (y + 1) + "|" + face); try {// 注意有沒有陣列越界 if (map[x][y]) {// 1.true,左轉 face += face == 0 ? 3 : -1; } else {// 0.false,右轉 face += face == 3 ? -3 : 1; } } catch (ArrayIndexOutOfBoundsException rua) { if (x < 0) x += 1; if (x > l) x -= 1; if (y < 0) y += 1; if (y > w) y -= 1; } switch (face) {// 前進! case 0: y -= 1; break; case 1: x -= 1; break; case 2: y += 1; break; case 3: x += 1; break; } } System.out.println(x + " " + y); } }