【网易模拟笔试】3道全AC,分享一下个人的答案。

第一道 税收新政策

感觉这道题的考点就是考审题能力还有Coding技巧了,主要用一个flag标志当前数字处于哪个收入层次。

import java.util.Scanner;

/**
 * 网易2020校园招聘模拟笔试
 * 国家新税收制度
 * 纯属Coding技巧的题目
 */
public class Main {

    public static double process(int n) {
        int num = n - 5000;
        boolean flag = false;
        double sum = 0;
        if (num > 80000) {
            sum += (num - 80000) * 0.45;
            flag = true;
        }
        if (flag == true || num > 55000) {
            sum = (flag == true ? (sum + (80000 - 55000) * 0.35) : (sum + (num - 55000) * 0.35));
            flag = true;
        }
        if (flag == true || num > 35000) {
            sum = (flag == true ? (sum + (55000 - 35000) * 0.3) : (sum + (num - 35000) * 0.3));
            flag = true;
        }

        if (flag == true || num > 25000) {
            sum = (flag == true ? (sum + (35000 - 25000) * 0.25) : (sum + (num - 25000) * 0.25));
            flag = true;
        }
        if (flag == true || num > 12000) {
            sum = (flag == true ? (sum + (25000 - 12000) * 0.2) : (sum + (num - 12000) * 0.2));
            flag = true;
        }

        if (flag == true || num > 3000) {
            sum = (flag == true ? (sum + (12000 - 3000) * 0.1) : (sum + (num - 3000) * 0.1));
            flag = true;
        }
        if (num > 0) {
            sum = (flag == true ? (sum + 3000 * 0.03) : (sum + num * 0.03));
        }
        return sum;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while (t-- > 0) {
            int n = sc.nextInt();
            System.out.printf("%.0f", process(n));
            System.out.println();
        }
    }
}

第二道 将4个及4个以上连续字典序的字母转为"首个字母-结束字母"的形式

package wangyi;

import java.util.Scanner;

/**
 * 网易2020校园招聘模拟笔试
 * 将4个及4个以上连续字典序的字母转为"首个字母-结束字母"的形式
 * 思路:从第一个字母开始遍历到倒数第2个字母,判断str.charAt(i + 1) - str.charAt(i)是否等于1,若是则记录连续数量以及暂存字母序列到temp中
 * 当时str.charAt(i + 1) - str.charAt(i) != 1时, 若count >= 3,则可以拼接出"首个字母-结束字母"的形式,若count < 3,则还是以原来的序列添加到结果集合中
 */
public class Main {

    public static String process(String str) {
        int count = 0; // 计算有几个连续的字母
        StringBuilder sb = new StringBuilder(); // 最终结果
        StringBuilder temp = new StringBuilder(); // 用于暂存临时的字母序列
        int i = 0;
        for (; i < str.length() - 1; i++) {
            if (str.charAt(i + 1) - str.charAt(i) == 1) {
                temp.append(str.charAt(i));
                count++;
            } else {
                if (count >= 3) {
                    sb.append(temp.charAt(0) + "-" + str.charAt(i));
                } else {
                    sb.append(temp);
                    sb.append(str.charAt(i));
                }
                count = 0;
                temp = new StringBuilder();
            }
        }
        // 最后需要作判断
        if (count >= 3 && str.charAt(i) - str.charAt(i - 1) == 1) {
            sb.append(temp.charAt(0) + "-" + str.charAt(i));
        } else {
            sb.append(temp).append(str.charAt(i));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n-- > 0) {
            String str = sc.next();
            System.out.println(process(str));
        }
    }
}

第三道 恢复X进制和Y进制的数字

主要思路就是用二分法寻找分割字符串的中点,然后看左右两个字符串恢复成10进制数字是否相等。

package wangyi;

import java.util.Scanner;

/**
 * 网易2020校园招聘模拟笔试
 * 恢复X进制和Y进制的数字
 * 思路:用二分法,将字符串进行分割,分别计算左边和右边的字符串对应各自进制的数字是多少
 * 若左边 > 右边,则right = mid,寻找中点进行分割
 * 若左边 < 右边,则left = mid,寻找中点进行分割
 * 若左边 == 右边,说明寻找到了答案
 */
public class Main {

    // 用二分法寻找中点,再分别计算中点左右各自进制对应的数字
    public static int process(String str, int x, int y) {
        int length = str.length();
        int left = 0;
        int right = length - 1;
        while (left < right) {
            int mid = left + ((right - left) >> 1);
            // 左边字符串
            String str1 = str.substring(0, mid + 1);
            // 右边字符串
            String str2 = str.substring(mid + 1);

            int[] resArr = calculate(str1, str2, x, y);
            if (resArr[0] == resArr[1]) {
                return resArr[0];
            } else if (resArr[0] > resArr[1]) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return -1;
    }

    // 计算字符串左边和字符串右边各自进制对应的数字
    public static int[] calculate(String str1, String str2, int x, int y) {
        int num1 = 0;
        int num2 = 0;
        int length = str1.length() - 1;
        for (int i = 0; i < str1.length(); i++) {
            if (str1.charAt(i) >= 'A' && str1.charAt(i) <= 'Z') {
                num1 += Integer.valueOf(str1.charAt(i) - 55) * Math.pow(x, length--);
            } else {
                num1 += Integer.valueOf(str1.charAt(i) - 48) * Math.pow(x, length--);
            }
        }

        length = str2.length() - 1;
        for (int i = 0; i < str2.length(); i++) {
            if (str2.charAt(i) >= 'A' && str2.charAt(i) <= 'Z') {
                num2 += Integer.valueOf(str2.charAt(i) - 55) * Math.pow(y, length--);
            } else {
                num2 += Integer.valueOf(str2.charAt(i) - 48) * Math.pow(y, length--);
            }
        }
        return new int[]{num1, num2};
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n-- > 0) {
            int x = sc.nextInt();
            int y = sc.nextInt();
            String str = sc.next();
            System.out.println(process(str, x, y));
        }
    }
}
#网易##笔试题目#
全部评论
第一题的问题和四舍五入有关吗?比如收入是小数
点赞 回复 分享
发布于 2019-08-05 13:27
第一题我把交税区间和税率做成2个数组来求;第二题用了一个辅助整型矩阵(求字符差);第三题思路和楼主一样
点赞 回复 分享
发布于 2019-08-05 10:38
同问 第一题都一样呀~通过率0 是输出格式不对吗?也都改成lld了呀
点赞 回复 分享
发布于 2019-08-05 09:36
第三题同二分法 但是只过了60% 有什么异常输入要考虑的吗。。。
点赞 回复 分享
发布于 2019-08-05 07:21
请问一下为什么自测能通过 但是提交就是0case?
点赞 回复 分享
发布于 2019-08-05 00:03
为何我没收到模拟笔试的通知小兄弟
点赞 回复 分享
发布于 2019-08-04 23:13
这个模拟笔试是在哪里做的,没看到。。
点赞 回复 分享
发布于 2019-08-04 22:20
第一题是要输入一个数字就输出一个结果吗???我是全输入完在一起输出,计算没有问题但就是0通过率
点赞 回复 分享
发布于 2019-08-04 22:13
奔溃,第三道一模一样的思路,就是说我超时了
点赞 回复 分享
发布于 2019-08-04 21:34
感觉等到正式笔试的时候,时间应该没这么充足吧,3道题2个小时。。。
点赞 回复 分享
发布于 2019-08-04 21:31

相关推荐

屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
07-09 18:33
门头沟学院 Java
这么逆天每年都有人去???&nbsp;填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
评论
点赞
23
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务