荣耀8.30笔试题解

第一题将nB转换为KB、MB、GB等
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        double n = Integer.parseInt(br.readLine().trim());
        int level = 0;
        String[] Unit = new String[]{"B", "KB", "MB", "GB"};
        while(n >= 1024 && level < 3){
            n /= 1024;
            level ++;
        }
        System.out.println(String.format("%.2f", n) + Unit[level]);
    }
}

第二题:采花蜜的最近距离,给定五处地点的坐标,返回把五处地点都采集完毕再返回原点的总路程
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    static int[][] location;
    static int n;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine().trim();
        String[] params = str.split(" ");
        n = 5;
        location = new int[n][2];

        for(int i = 0; i < n; i++){
            location[i][0] = Integer.parseInt(params[i * 2]);
            location[i][1] = Integer.parseInt(params[i * 2 + 1]);
        }
        double res = Double.MAX_VALUE;
        for(int i = 0; i < n; i++){
            int a = location[i][0];
            int b = location[i][1];
            int dis = (int)Math.sqrt(a * a + b * b);
            res = Math.min(res, dfs(0, i) + dis);
        }
        //这里要四舍五入
        System.out.printf("%.0f%n", res);
    }

    /**
     * 
     * @param mask mask为掩码,第i位为1时表示第i处花丛已经采过
     * @param cur 当前所在的花丛
     * @return 距离和
     */
    private static double dfs(int mask, int cur){
        int x = location[cur][0];
        int y = location[cur][1];
        // 如果所有掩码位都为1,说明5处地点都采过了,返回原点到当前点的距离
        if(mask == (1 << n) - 1){
            return Math.sqrt(x * x + y * y);
        }
        double res = Double.MAX_VALUE;

        for(int i = 0; i < n; i++){
            if(((1 << i) & mask) != 0){
                continue;
            }
            int a = location[i][0] - x;
            int b = location[i][1] - y;
            double distance = dfs(mask | (1 << i), i) + Math.sqrt(a * a + b * b);
            res = Math.min(res, distance);
        }
        return res;
    }
}
第三题  给定两行字符串,一行是标准答案,一行是学生答案,求得分,积分规则:对学生答案中的单词可以进行添加(但总分-2),删除(总分-1),修改(总分-1,且要修改的单词包含对应标准答案的单词中的字母的个数多于后者的一半),得分为在修改规则下将学生答案修改为标准答案所扣除的分数  + 标准答案的单词数
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    static List<String> answer, student;
    static int m, n;
    static int[][] dp;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] params = br.readLine().trim().split(" ");
        answer = new ArrayList<>();
        for (String param : params) {
            param = param.trim();
            if ("".equals(param)) {
                continue;
            }
            answer.add(param);
        }
        params = br.readLine().trim().split(" ");
        student = new ArrayList<>();
        for (String param : params) {
            param = param.trim();
            //去掉空串
            if ("".equals(param)) {
                continue;
            }
            student.add(param);
        }
        m = answer.size();
        n = student.size();
        //记忆数组
        dp = new int[m][n];
        int res = dfs(0, 0);
        res += m;
        System.out.println(res);
    }
    private static int dfs(int i, int j){
        if(i == m || j == n){
            return -1 * (n - j) - 2 * (m - i);
        }
        if(dp[i][j] != 0){
            return dp[i][j];
        }
        int res = Integer.MIN_VALUE;
        if(student.get(j).equals(answer.get(i))){
            //正确的
            res = Math.max(dfs(i + 1, j + 1), res);
        }else if(canReplace(answer.get(i), student.get(j))){
            //替换
            res = Math.max(dfs(i + 1, j + 1) - 1, res);
        }
        //删除
        res = Math.max(dfs(i, j + 1) - 1, res);
        //增加
        res = Math.max(dfs(i + 1, j) - 2, res);
        dp[i][j] = res;
        return res;

    }
    private static boolean canReplace(String ans, String word){
        int n = ans.length();
        int[] count = new int[255];
        for(int i = 0; i < n; i++){
            count[ans.charAt(i)] ++;
        }
        int same = 0;
        for (int i = 0; i < word.length(); i++) {
            int c = word.charAt(i);
            if(count[c] > 0){
                same ++;
                count[c] --;
            }
        }
        return same * 2 > n;
    }
}                



#题解##荣耀笔试##荣耀#
全部评论
楼主有下一个流程了吗
点赞 回复 分享
发布于 2022-09-18 15:37 江苏

相关推荐

还在公海池里。。。&nbsp;能不能给孩子一次面试机会。。。&nbsp;不知道在海里游多久能上岸
我只是一个小白菜:人才库就人才库,还搞个公海
投递京东等公司10个岗位
点赞 评论 收藏
分享
从大一开始就开始学习Java,一路走来真的不算容易,每次面试都被压力,不过这次终于达成了自己的一大心愿!时间线和面经:8.17-投递9.1-一面实习+项目拷打看门狗机制讲一下redis加锁解锁的本身操作是什么Lua脚本是干什么的udp和tcp讲一下流量控制讲一下令牌桶算法说一下大端和小端是什么线程和协程有什么区别怎么切换协程切换的时候具体做了什么对于程序来说,你刚才提到的保存和恢复现场,这个现场有哪些信息udp优势现在有一个客户端和服务端,要实现TCP的通信,我们的代码要怎么写服务器怎么感知有新的连接怎么处理多个客户端的请求连接TCP怎么处理粘包和分包现在有两个文件,然后每个文件都有一亿条URL,每个的长度都很长,要怎么快速查找这两个文件共有的URLHashmap底层说一下怎么尽量提升插入和查询的效率如果要查找快,查询快,还有解决非空的问题,怎么做LoadingCache了解吗手撕:堆排序9.4-二面部门的leader,超级压力面拷打实习+项目,被喷完全没东西类的加载到垃圾回收整个底层原理讲一遍类加载谁来执行类加载器是什么东西,和进程的关系Java虚拟机是什么东西,和进程的关系如果我们要执行hello&nbsp;world,那虚拟机干了什么呢谁把字节码翻译成机器码,操作时机是什么Java虚拟机是一个执行单元吗Java虚拟机和操作系统的关系到底什么,假如我是个完全不懂技术的人,举例说明让我明白一个操作系统有两个Java程序的话,有几个虚拟机有没有单独的JVM进程存在启动一个hello&nbsp;world编译的时候,有几个进程JVM什么时候启动比如执行一条Java命令的时候对应一个进程,然后这个JVM虚拟机到底是不是在这个进程里面,还是说要先启动一个JVM虚拟机的进程垃圾回收机制的时机能手动触发垃圾回收吗垃圾回收会抢占业务代码的CPU吗垃圾回收算法简单说说垃圾回收机制的stop&nbsp;the&nbsp;world存在于哪些时机垃圾回收中的计算Region的时候怎么和业务代码并行执行假如只有一个线程,怎么实现并行Java为什么要这么实现Java效率比C++慢很多,那为什么还要这样实现Java虚拟机到底是什么形式存在的说一下Java和C++的区别还有你对Java设计理念的理解无手撕面试结束的时候,我真的汗流浃背了,面试官还和我道歉,说他是故意压力面想看看我的反应的,还对我给予了高度评价:我当面试官这么多年,你是我见过最好的一个9.9-三面临时通知的加面,就问了三十分钟项目9.11-hr面问过往经历,未来计划,想从腾讯实习中得到什么?当场告知leader十分满意我,所以直接ochr面完一分钟官网流程变成录用评估中,30分钟后mt加微信告知offer正在审批9.15-offer这一次腾讯面试体验真的不错,每个面试官能感觉到专业能力很强,反馈很足,比起隔壁某节真是好太多以后就是鹅孝子了
三本咋了:当面试官这么多年你是我见过的最好的一个
你面试被问到过哪些不会的...
点赞 评论 收藏
分享
不会hc都被抢完了吧
投递深圳市新凯来技术等公司10个岗位
点赞 评论 收藏
分享
评论
5
25
分享

创作者周榜

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