1旋转打印,生成旋转数组
1~25
打印
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
典型模拟题,两个方向数组,遇到边界或有的值换方向;当时错想用打印的那个数/n%4然后定位到方向里换,不对,只能打印最外圈,数组越界,下来换思路只看是否越界或者有数就换方向就可以,但是要保存之前的值,代码如下:
import java.util.*;
public class Main {
private static void printArray(int n){
int[] dir_x=new int[]{0,1,0,-1};
int[] dir_y=new int[]{1,0,-1,0};
int[][] res=new int[n][n];
int i=1;
int x=0;
int y=0;
int t=0;
while(true){
System.out.println(Arrays.deepToString(res));
System.out.println("/////");
res[x][y]=i;
int q=x;
int w=y;
x+=dir_x[t];
y+=dir_y[t];
//换向检查、短路计算、返回上一个状态再前进
if(x<0 ||y<0 || x>=n || y>=n||res[x][y]!=0){
t++;
t=t%4;
x=q+dir_x[t];
y=w+dir_y[t];
}
if(i==n*n){
break;
}
i++;
}
for(int k=0;k<n;k++){
for(int j=0;j<n;j++){
System.out.print(res[k][j]);
if(j!=n-1){
System.out.print(" ");
}
}
System.out.println();
}
return;
}
public static void main(String[] args) {
printArray(5);
return;
}
}
2.智力题,赛马
64马,8跑道,找前四
前8场:8组跑
留下每组前4;剩32个
第九场:每组前1跑
去掉后成绩四的所有马,剩16个
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
假设竖方向是前8场的结果,第一排横方向是第九场结果剩余结果
根据推理 14 11 8 12 15 16一定不会是前4
因为1 2 3 7一定比11快
1 2 3 4
5 6 7
9 10
13
1一定是第一,剩下9个两场一定可以出来前一场随便找8个,后一场把剩余的一个与前4跑就可以
答案11场
其他的就是问项目了,智力题主要是分治加回溯?每组必须前四,因为没法判断不同组之间的相对顺序;
其他就是问项目了
#拼多多面经##我的实习求职记录##我的失利项目复盘##2023实习##拼多多暑假实习面经#