小红书笔试:倒卖战利品求代码。附:另外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;
}
}
} 说实在,感觉题目不太难,自己还是太嫩了😆
凡岛公司福利 667人发布