阿里暑期实习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实习##阿里巴巴##笔经#