小红书笔试:倒卖战利品求代码。附:另外3题代码
最后1题“倒卖战利品”没来得及做,有人写出来了吗?附上前3道:
1. 棋盘最短路径(100%)
import java.util.Arrays; import java.util.Scanner; public class 棋盘最短路径 { public static int min = Integer.MAX_VALUE; public static boolean find = false; public static void main( String[] args ) { helper(); } private static void helper() { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextInt(); boolean[][] go = new boolean[n][m]; boolean[][] visit = new boolean[n][m]; for(int i=0;i<n;i++) { Arrays.fill(go[i], true); } for(int i=0;i<k;i++) { int a = sc.nextInt(); int b = sc.nextInt(); go[a][b] = false; } findPath(0, 0, 0, visit, go, n - 1, m - 1); if(find) { System.out.println(min); }else { System.out.println(0); } } private static void findPath( int row , int col , int s, boolean[][] visit, boolean[][] go, int targetRow, int targetCol ) { if(row == targetRow && col == targetCol) { find = true; if(s < min) { min = s; } return; } if(col < targetCol && !visit[row][col+1] && go[row][col+1]) { // 右 visit[row][col+1] = true; findPath(row, col + 1, s + 1, visit, go, targetRow, targetCol); visit[row][col+1] = false; } if(row < targetRow && !visit[row+1][col] && go[row+1][col]) { // 下 visit[row+1][col] = true; findPath(row + 1, col, s + 1, visit, go, targetRow, targetCol); visit[row+1][col] = false; } if(col > 0 && !visit[row][col-1] && go[row][col-1]) { // 左 visit[row][col-1] = true; findPath(row, col - 1, s + 1, visit, go, targetRow, targetCol); visit[row][col-1] = false; } if(row > 0 && !visit[row-1][col] && go[row-1][col]) { // 上 visit[row-1][col] = true; findPath(row - 1, col, s + 1, visit, go, targetRow, targetCol); visit[row-1][col] = false; } } }2. 笔记草稿(100%)
import java.util.Scanner; public class 笔记草稿 { public static void main( String[] args ) { helper(); } private static void helper() { Scanner sc = new Scanner(System.in); String s = sc.next(); String res = ""; int count = 0, len = s.length(); for(int i=0;i<len;i++) { char c = s.charAt(i); if(c == '(') { count ++; }else if(c == ')') { count --; }else if(c == '<') { if(res.length() > 0 && count == 0 && res.charAt(res.length() - 1) != ')') { res = res.substring(0, res.length() - 1); } }else if(count == 0) { res += c; } } System.out.println(res); } }3. 迷宫游戏(过了50%)
import java.util.Scanner; public class 迷宫游戏 { public static int min = Integer.MAX_VALUE; public static boolean find = false; public static void main( String[] args ) { helper(); } private static void helper() { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); char[][] a = new char[n][n]; boolean[][] visit = new boolean[n][n]; int srow = 0, scol = 0, erow = 0, ecol = 0; for(int i=0;i<n;i++) { String tmp = sc.next(); for(int j=0;j<n;j++) { a[i][j] = tmp.charAt(j); if(a[i][j] == 'S') { srow = i; scol = j; }else if(a[i][j] == 'E') { erow = i; ecol = j; } } } findPath(srow, scol, 0, a, visit, erow, ecol); if(find) { System.out.println(min); }else { System.out.println(-1); } } private static void findPath( int row , int col , int s , char[][] a , boolean[][] visit, int erow , int ecol ) { if(row == erow && col == ecol) { find = true; if(s < min) { min = s; } return; } int n = a.length - 1; if(col < n && !visit[row][col+1] && a[row][col+1] != '#') { // 右未到头 visit[row][col+1] = true; findPath(row, col + 1, s + 1, a, visit, erow, ecol); visit[row][col+1] = false; }else if(col == n && !visit[row][0] && a[row][0] != '#'){ // 右到头 visit[row][0] = true; findPath(row, 0, s + 1, a, visit, erow, ecol); visit[row][0] = false; } if(row < n && !visit[row+1][col] && a[row+1][col] != '#') { // 下未到头 visit[row+1][col] = true; findPath(row + 1, col, s + 1, a, visit, erow, ecol); visit[row+1][col] = false; }else if(row == n && !visit[0][col] && a[0][col] != '#'){ // 下到头 visit[0][col] = true; findPath(0, col, s + 1, a, visit, erow, ecol); visit[0][col] = false; } if(col > 0 && !visit[row][col-1] && a[row][col-1] != '#') { // 左未到头 visit[row][col-1] = true; findPath(row, col - 1, s + 1, a, visit, erow, ecol); visit[row][col-1] = false; }else if(col == 0 && !visit[row][n] && a[row][n] != '#'){ // 左到头 visit[row][n] = true; findPath(row, n, s + 1, a, visit, erow, ecol); visit[row][n] = false; } if(row > 0 && !visit[row-1][col] && a[row-1][col] != '#') { // 上未到头 visit[row-1][col] = true; findPath(row - 1, col, s + 1, a, visit, erow, ecol); visit[row-1][col] = false; }else if(row == 0 && !visit[n][col] && a[n][col] != '#'){ // 上到头 visit[n][col] = true; findPath(n, col, s + 1, a, visit, erow, ecol); visit[n][col] = false; } } }说实在,感觉题目不太难,自己还是太嫩了😆