京东第一批笔试两道AC代码记录贴

提前批简历直接被挂了,笔试记录贴
第一题:计算1/5-1/10+1/15-...-1/(5*2n),四舍五入并且保留四位小数;
import java.util.*;
class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        double sum = 0;
        int mul = 1;
        for(int i=1; i<2*n+1; ++i){
        sum += (double)mul/(5*i);
        mul *= -1;
        }
        String format = new DecimalFormat("#.0000").format(sum);
        System.out.println(format);
    }
}
第二题:计算[N,M]这个区间中满足条件的正整数的个数,其中条件为:对于一个正整数,去掉任意一位后既是回文数,也是素数,则此整数满足要求。(注:这题当判断素数加一个条件小于2直接返回false,准确率由31%->91%,当判断回文数加一个条件整数小于0返回false,准确率由91%->AC import java.util.*;
class Main{
    static Map<Integer,Boolean> primeMap = new HashMap<>();
    static Map<Integer,Boolean> palindromeMap = new HashMap<>();
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        //记忆化搜索,对于指定数字我们只需要计算一次,然后存储进入hashmap中即可判断其是否是素数或者回文数
        int cnt = 0;
        for(int tmp = n; tmp<=m; tmp++){
            //取出一个数字,并且进行拆分和判断,当有一个满足要求的时候,我们就将满足要求的个数加1,并且将计算到的回文串数字存储进map进行加速
            String s = String.valueOf(tmp);
            int len = s.length();
            for(int i=0;i<len;++i){
                String stmp = "0";
                if(i==0)stmp = stmp + s.substring(1,len);//第0位需要特殊处理
                else if(i<len-1){
                    stmp = stmp + s.substring(0,i)+s.substring(i+1,len);
                }else{
                    stmp = stmp + s.substring(0,len-1);
                }
                int itemp = Integer.parseInt(stmp);
                if(isPrime(itemp)&&isPalindrome(itemp)){
                    cnt++;
                    break;
                }
            }
        }
        System.out.println(cnt);
    }
    public static boolean isPrime(int x){
        if(x<2)return false;
        if(primeMap.containsKey(x)&& primeMap.get(x))return true;
        if(primeMap.containsKey(x)&&!primeMap.get(x))return false;
        int i=2;
        while(i<=Math.floor(Math.sqrt(x))&&(x%i!=0)){
            i++;
        }
        if(i>Math.floor(Math.sqrt(x))) {
            primeMap.put(x, true);
            return true;
        }
        else {
            primeMap.put(x, false);
            return false;
        }
    }
    public static boolean isPalindrome(int x){
        if(x<0)return false;
        if(palindromeMap.containsKey(x)&& palindromeMap.get(x))return true;
        if(palindromeMap.containsKey(x)&&!palindromeMap.get(x))return false;
        String tmp = String.valueOf(x);
        int len = tmp.length();
        int i=0, j=len-1;
        while(i<=j){
            if(tmp.charAt(i)!= tmp.charAt(j)){
                palindromeMap.put(x,false);
                return false;
            }
            i++;
            j--;
        }
        palindromeMap.put(x,true);
        return true;
    }
}


#笔试题目##京东#
全部评论
牛,思路清晰,算法简洁,大佬,都咋做的题啊。
点赞 回复 分享
发布于 2020-08-06 23:11
大佬太强了,妥妥的offer收割机
点赞 回复 分享
发布于 2020-08-06 23:26

相关推荐

美团 后端开发 总包n(15%是股票)
点赞 评论 收藏
分享
1 6 评论
分享
牛客网
牛客企业服务