阿里暑期实习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实习##阿里巴巴##笔经#
全部评论
这做的跟我一样
1 回复
分享
发布于 2022-03-14 22:40
第二题示例为什么结果是9哇😂
1 回复
分享
发布于 2022-03-29 09:01
滴滴
校招火热招聘中
官网直投
以下是萌新博主题解~ https://blog.csdn.net/qq_38649940/article/details/123487229
点赞 回复
分享
发布于 2022-03-14 20:33

相关推荐

点赞 评论 收藏
转发
3 9 评论
分享
牛客网
牛客企业服务