当前位置: 首页 > 面试经验 >

京东测试岗第二批笔试

优质
小牛编辑
105浏览
2023-03-28

京东测试岗第二批笔试

笔试分为两种题型:前面20道选择题,后面3道编程题;
选择题包括:计算机网络(三次握手四次挥手、子网掩码、HTTP协议等)、Java基础知识(静态方法和实例方法...)...
编程题3道:
1、赝品可能最大数量
一批物品n个,输入n个数代表其价值,真品价值比赝品大,要求输入可能的赝品个数,其中真品至少一个
我的解题思路:找数值最大的值,一定是真品的值,总个数-最大值的个数=赝品个数
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int[] nums = new int[a];
        HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(int i = 0;i<a;i++){
            nums[i] = in.nextInt();
        }
        for(int i = 0;i<a;i++){
            if(map.get(nums[i])!=null){
                map.put(nums[i],map.get(nums[i])+1);
            }else {
                map.put(nums[i],1);
            }
        }
        int max_v = 0;
        for(int v:map.keySet()){
            if(max_v<v){
                max_v = v;
            }
        }
2、求满足条件的最小约数
输入n个数,求每一个数值(a)满足p*p>a的约数p
我的解题思路:对于每一个数从2开始求它的约数p,并判断是否满足p*p>a,直到a/2。
但是只通过了44.5%的例子,定位到问题是因为输入的数值过大(11位)直接按字符串输入了,当时没时间改了
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        long[] nums = new long[a];
        for(int i = 0;i<a;i++){
            nums[i] = in.nextLong();
        }
        for(int i = 0;i<a;i++){
            int flag = 0;
            for(int k=2;k<nums[i]/2+1;k++){
                if (nums[i]%k==0){
                    if(k*k>nums[i]){
                        flag = 1;
                        System.out.println(k);
                        break;
                    }
                }
            }
            if(flag==0){
                System.out.println(nums[i]);
            }
        }
3、求分解次数
输入数组包括n个数,对于每一个数a进行分解,比如2可以分解成1和1,需要分解一次;3可以分解成1+2,2再分解成1和1,共分解2次;6可以分解成2*3,再进行分解,共4次,求数组中数据共需要分解多少次
解题思路:借助hashmap+递归
当时没时间测试了一下报错就时间到了,也没来得及提交代码,结束之后改了一下代码不知道能通过多少用例
import java.util.HashMap;
import java.util.Scanner;
public class Main {

    public static int numsMove(int n,HashMap<Integer,Integer> map){
        int min = 0;
        if(n==1){
            map.put(n,0);
            return 0;
        }
        if(n==2){
            map.put(n,1);
            return 1;
        }
        if(map.get(n)!=null){
            return map.get(n);
        }else{
            int flag = 0;
            for(int i=2;i<n/2+1;i++){
                if(n%i==0){
                    flag = flag + 1;
                    if(flag == 1){
                        min = numsMove(i,map)+numsMove(n/i,map)+1;
                    }
                    if(numsMove(i,map)+numsMove(n/i,map)+1<min){
                        min = numsMove(i,map)+numsMove(n/i,map)+1;
                    };
                }
            }
            if(flag == 0){
                min = 1 + numsMove(n-1,map);
            }
            map.put(n,min);
            return min;
        }
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int[] nums = new int[a];
        for(int i = 0;i<a;i++){
            nums[i] = in.nextInt();
        }
        int sum = 0;
        HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(int i = 0;i<a;i++){
            sum = sum + numsMove(nums[i],map);
        }
        System.out.println(sum);
    }
}
以上三道编程是我的解题思路,其中2、3不能保证100%AC,欢迎大佬批评指正或者有更好的思路可以留言评论,祝大家早日拿到合适的offer!



#京东笔试##京东秋招##测试开发#
 类似资料: