阿里笔试3 .25
阿里笔试3.25号题目,没参加这一场,试着写了下,测试了一个用例,通过了,不知道能不能AC import java.util.Scanner; public class Main3 { public static void main(String [] args){ Scanner reader = new Scanner(System.in); int n = reader.nextInt(); reader.nextLine(); int [][] array = new int[3][n]; for(int i = 0; i < 3;i++){ for(int j = 0; j < n;j++){ array[i][j] = reader.nextInt(); } reader.nextLine(); } int[][] dp = new int[n][3]; for(int i = 0; i < n;i++){ for(int j = 0; j < 3;j++){ dp[i][j] = Integer.MAX_VALUE; } } dp[0][0] = 0; dp[0][1] = 0; dp[0][2] = 0; for(int i = 1;i < n;i++){ for(int j = 0; j < 3;j++){ // 第i列的 for(int k = 0;k < 3;k++){ // 第i - 1列的 int temp = dp[i - 1][k] + Math.abs(array[j][i] - array[k][i- 1]); if(temp < dp[i][j]){ dp[i][j] = temp; } } } } System.out.println(Math.min(dp[n - 1][0],Math.min(dp[n - 1][1],dp[n - 1][2]))); } }
测试用例
5
5 9 5 4 4
4 7 4 10 3
2 10 9 2 3
输出:5
5 9 5 4 4
4 7 4 10 3
2 10 9 2 3
输出:5
第二题,没参加这期笔试,不知道能不能AC,测试用例过了
import java.util.Scanner; public class Main4 { public static void main(String [] args){ // 读取数据 Scanner reader = new Scanner(System.in); int m = reader.nextInt(); // m行n列 int n = reader.nextInt(); int q = reader.nextInt(); reader.nextLine(); int [][] array = new int[m][n]; for(int i = 0; i < m;i++){ for(int j = 0; j < n; j++){ array[i][j] = reader.nextInt(); } reader.nextLine(); } int[][] que = new int [q][2]; for(int i = 0; i < q;i++){ que[i][0] = reader.nextInt(); que[i][1] = reader.nextInt(); reader.nextLine(); } // 开始填充 boolean flag = true; while(flag){ flag = false; // 遍历行进行填充 for(int i = 0; i < m;i++){ int left = -1; int right = -1; boolean temp_flag = false; for(int j = 0; j < n;j++){ if(array[i][j] != 0){ if(left == -1)left = j; else if(right == -1){ right = j; temp_flag = true; break; } } } if(temp_flag){ int d = (array[i][right] - array[i][left])/(right - left); for(int k = 0; k < m;k++){ if(array[i][k] == 0){ array[i][k] = array[i][right] - d * (right - k); flag = true; } } } } // 遍历列进行填充 for(int i = 0; i < n;i++){ int up = -1; int down = -1; boolean temp_flag = false; for(int j = 0; j < m;j++){ if(array[j][i] != 0){ if(up == -1)up = j; else if(down == -1){ down = j; temp_flag = true; break; } } } if(temp_flag){ int d = (array[down][i] - array[up][i])/(down - up); for(int k = 0; k < m;k++){ if(array[k][i] == 0){ array[k][i] = array[down][i] - d * (down - k); flag = true; } } } } } for(int i = 0; i < q;i++){ if(array[que[i][0] - 1][que[i][1] - 1] != 0){ System.out.println(array[que[i][0] - 1][que[i][1] - 1]); } else{ System.out.println("Unknown"); } } } }