阿里暑期实习2022年3月14号笔试前两道笔经
笔试总过6道单选,6道多选,感觉是从牛客的题库抽的。
还有三道原创编程题,难度:简单(A了),中等偏简单(本来用BFS,复杂度太高,最后改方法,究极一发A了),中等偏困难(还剩15分钟,心烦意乱,直接交卷,没A)。
第一题:模拟
- 计算十六进制数字(比如:
0xeeeeeffffffc01abc)转成二进制数字之后,包含1的数量。
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
String num_16 = reader.readLine();
int res = 0;
for(int i=2; i<num_16.length(); ++i) {
switch(num_16.charAt(i)) {
case '0':
break;
case '1':
res+=1;
break;
case '2':
res+=1;
break;
case '3':
res+=2;
break;
case '4':
res+=1;
break;
case '5':
res+=2;
break;
case '6':
res+=2;
break;
case '7':
res+=3;
break;
case '8':
res+=1;
break;
case '9':
res+=2;
break;
case 'a':
res+=2;
break;
case 'b':
res+=3;
break;
case 'c':
res+=2;
break;
case 'd':
res+=3;
break;
case 'e':
res+=3;
break;
case 'f':
res+=4;
break;
default:
break;
}
}
writer.write(res+"\n");
writer.flush();
writer.close();
}
} 第二题:我用的贪心
- 计算矩阵中元素为
0的上下左右四个方向是否有1存在,每个方向只要存在1,这个元素0的得分就+1,计算矩阵中所有元素0的得分之和。
输入: 2 4 0 1 0 0 1 0 1 1 输出: 9
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
String top = reader.readLine();
StringTokenizer st = new StringTokenizer(top);
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] arr = new int[n][m];
String line = null;
int k=0;
while((line = reader.readLine())!=null) {
StringTokenizer st1 = new StringTokenizer(line);
if(k>=n) break;
for(int i=0; i<m; ++i) {
arr[k][i] = Integer.parseInt(st1.nextToken());
}
k++;
}
int res = 0;
for(int i=0; i<n; ++i) {
int cnt = 0;
for(int j=0; j<m; ++j) {
if(arr[i][j]==0) {
cnt++;
} else {
res+=cnt;
cnt = 0;
}
}
}
for(int i=0; i<n; ++i) {
int cnt = 0;
for(int j=m-1; j>=0; --j) {
if(arr[i][j]==0) {
cnt++;
} else {
res+=cnt;
cnt = 0;
}
}
}
for(int j=0; j<m; ++j) {
int cnt = 0;
for(int i=0; i<n; ++i) {
if(arr[i][j]==0) {
cnt++;
} else {
res+=cnt;
cnt = 0;
}
}
}
for(int j=0; j<m; ++j) {
int cnt = 0;
for(int i=n-1; i>=0; --i) {
if(arr[i][j]==0) {
cnt++;
} else {
res+=cnt;
cnt = 0;
}
}
}
writer.write(res+"\n");
writer.flush();
writer.close();
}
} #阿里2022春招阿里2023实习##阿里巴巴##笔经#
查看12道真题和解析