猿辅导校招技术类笔试题

猿辅导校招技术类笔试题

2019年

大巴车

在这里插入图片描述
这道题还挺简单的,题干也写了,数组按块翻转,块内保持不变

import java.util.*;
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while(in.hasNext()) {int n = in.nextInt();int m = in.nextInt();int nums[] = new int[n];int re[] = new int[n];for (int i = 0; i < n; i++) {nums[i] = in.nextInt();}int count = n/m;  //需要多少个车int res = n%m;    //最后一个车坐多少人int index = 0;for (int i = 0; i < res; i++) {  //最后一车人先上车re[index++] = nums[count*m+i];}for (int i = count-1; i >= 0; i--) {for (int j = 0; j < m; j++) {re[index++] = nums[i*m+j];}}for (int i = 0; i < re.length; i++) {System.out.print(re[i]+" ");}System.out.println();}		}
}

在这里插入图片描述

2020年

小猿的击鼓传花(70%)

在这里插入图片描述
是动态规划的思想,但是数字太大了,只过了70%肯定是因为数字太大然后溢出了。

import java.util.Scanner;public class Main {public static void main(String[] args) {//动态规划问题,dp[i][j]表示第i次击鼓的时候,0在手里1不在手里Scanner in = new Scanner(System.in);int mod = 1000000007;while(in.hasNext()) {int n = in.nextInt();  //击鼓次数int k = in.nextInt();  //人个数long[][] dp = new long[n+1][2];//设置初始值,初始的时候在手里dp[0][0] = 1;dp[0][1] = 0;for (int i = 1; i < dp.length; i++) {dp[i][0] = dp[i-1][1]%mod;  //如果这次在手里,那上次肯定不在手里,并且这一轮只有一种可能dp[i][1] = (dp[i-1][0]%mod*(k-1) + dp[i-1][1]%mod*(k-2))%mod;  //这次不在手里,上次可能在手里也可能不在手里}System.out.println(dp[n][0]);}}
}

在这里插入图片描述

小猿的迷宫之旅

在这里插入图片描述

这道题应该算力扣上的hard了吧!
明明我照着下面一个答案敲的,明明检查很多遍就是一样的,但是就是死活过不了,气死我了。最后直接copy,ac,完美
力扣有一道差不多的,但是没有可以用啥卡的说法,这个dp数组多了一个维度记录用或者不用求救卡的情况

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while(in.hasNext()) {int m = in.nextInt();int n = in.nextInt();int k = in.nextInt();int[][] matrix = new int[m][n]; int[][][] memo = new int[m][n][k+1];   //保存记录for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {matrix[i][j] = in.nextInt();}}int max = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {  //从迷宫的每个位置为起点开始搜索int count = getNum(memo, matrix, m, n, i, j, k);max = count > max?count:max;}}System.out.println(max);}}public static int getNum(int[][][] dp,int[][] group,int M,int N,int x,int y,int k){if(k<0 || y<0 || x<0){  //越界判断return 0;}if(dp[x][y][k] != 0){   //已经计算过return dp[x][y][k];}int g1 = 0;int g2 = 0;int g3 = 0;int g4 = 0;//分别向上下左右四个方向进行尝试,需要判断是否用到紧急呼救按钮次数if(x-1 >= 0) {if(group[x-1][y] <= group[x][y]) {g1 = getNum(dp,group,M,N,x-1,y,k-1);}else {g1 = getNum(dp,group,M,N,x-1,y,k);}}if(y-1 >= 0) {if(group[x][y-1] <= group[x][y]) {g2 = getNum(dp,group,M,N,x,y-1,k-1);}else {g2 = getNum(dp,group,M,N,x,y-1,k);}}if(x+1 < N){if(group[x+1][y] <= group[x][y]) {g3 = getNum(dp,group,M,N,x+1,y,k-1);}else {g3 = getNum(dp,group,M,N,x+1,y,k);}}if(y+1 < M){if(group[x][y+1] <= group[x][y]) {g4 = getNum(dp,group,M,N,x,y+1,k-1);}else {g4 = getNum(dp,group,M,N,x,y+1,k);}}dp[x][y][k] = Math.max(Math.max(g1, g2),Math.max(g3, g4)) +1;return dp[x][y][k];}
}

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部