机考[1-10]

华为机考题:【比赛评分】 一个有N个选手参加比赛,选手编号为1~N(3<=N<=100),有M(3<=M<=10)个评委对选手进行打分。第2到M+1行是半角逗号分割的整数序列,表示评委为每个选手的打分,0号下标数字表示1号选手分数,1号下标数字表示2号选手分数,依次类推。第一行为半角逗号分割的两个正整数,第一个数字表示M(3<=M<=10)个评委,第二个数字表示N(3<=N<=100)个选手。2号选手得分36分排第1,1号选手36分排第2,5号选手30分(2号10分值有3个,1号10分值只有1个,所以2号排第一) 阅读详情

001 【5键键盘的输出】

有一个特殊的5键键盘,上面有a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。a键在屏幕上输出一个字母a;ctrl-c将当前选择的字母复制到剪贴板;ctrl-x将当前选择的字母复制到剪贴板,并清空选择的字母;ctrl-v将当前剪贴板里的字母输出到屏幕;ctrl-a选择当前屏幕上的所有字母。注意:
1剪贴板初始为空,新的内容被复制到剪贴板时会覆盖原来的内容
2当屏幕上没有字母时,ctrl-a无效
3当没有选择字母时,ctrl-c和ctrl-x无效
4当有字母被选择时,a和ctrl-v这两个有输出功能的键会先清空选择的字母,再进行输出
给定一系列键盘输入,输出最终屏幕上字母的数量。
输入描述:
输入为一行,为简化解析,用数字1 2 3 4 5代表a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入,数字用空格分隔 输出描述:
输出一个数字,为最终屏幕上字母的数量
示例1:
输入 1 1 1
输出 3
说明 连续键入3个a,故屏幕上字母的长度为3
示例2:
输入 1 1 5 1 5 2 4 4
输出 2
说明 输入两个a后ctrl-a选择这两个a,再输入a时选择的两个a先被清空,所以此时屏幕只有一个a,后续的ctrl-a,ctrl-c选择并复制了这一个a,最后两个ctrl-v在屏幕上输出两个a,故屏幕上字母的长度为2(第一个ctrl-v清空了屏幕上的那个a)

public class ZT01 {
    private static String screen = "";
    private static String choose = "";
    private static String jianQie = "";
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] input = sc.nextLine().split(" ");
        for (int i = 0; i < input.length; i++) {
            operate(Integer.parseInt(input[i]));
        }
        System.out.println(screen.length());
    }//a

    public static void operate(int num){
        if (num == 1){//a screen输入一个a
            if (choose.equals("")){
                screen += "a";
            }else {
                choose = "";
                screen = "a";
            }
            return;
        }
        if (num == 2){//ctrl-c
            jianQie = choose;
            return;
        }
        if (num == 3){//ctrl-x
            jianQie = choose;
            choose = "";
            screen = "";
            return;
        }
        if (num ==4){//ctrl-v
            if (choose.equals("")){
                screen += jianQie;
            }else {
                screen = jianQie;
                choose = "";
            }
            return;
        }
        if (num == 5){//ctrl-a
            choose = screen;
        }
    }
}

002 【N进制减法】

实现一个基于字符串的N机制的减法。
需要对输入的两个字符串按照给定的N进制进行减法操作,输出正负符号和表示结果的字符串。
输入描述:
输入:三个参数。
第一个参数是整数形式的进制N值,N值范围为大于等于2、小于等于35。
第二个参数为被减数字符串;
第三个参数为减数字符串。有效的字符包括09以及小写字母az,字符串有效字符个数最大为100个字符,另外还有结尾的\0。
限制:
输入的被减数和减数,除了单独的0以外,不能是以0开头的字符串。
如果输入有异常或计算过程中有异常,此时应当输出-1表示错误。
输出描述:
输出:2个。
其一为减法计算的结果,-1表示出错,0表示结果为整数,1表示结果为负数。
其二为表示结果的字符串。
示例1:
输入
2 11 1
输出
0 10
说明
按二进制计算 11 -1 ,计算正常,0表示符号为正数,结果为10
示例2:
输入
8 07 1
输出
-1
说明
按8进制,检查到减数不符合非0前导的要求,返回结果为-1,没有其他结果内容。

public class ZT02 {//2 11 1
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] input = sc.nextLine().split(" ");
        int jin = Integer.parseInt(input[0]);
        String numStr = input[1];
        String jianStr = input[2];
        //检查开头
        if (numStr.length() != 1 && jianStr.length() != 1 && (numStr.startsWith("0") || jianStr.startsWith("0"))){
            System.out.println(-1);
            return;
        }
        //检查结尾
        if (numStr.endsWith("/0")){
            numStr = numStr.substring(0,numStr.length()-2);
        }
        if (jianStr.endsWith("/0")){
            jianStr = jianStr.substring(0,jianStr.length()-2);
        }
        int no1 = 0;
        int no2 = 0;
        try {
            no1 = Integer.parseInt(numStr, jin);
            no2 = Integer.parseInt(jianStr, jin);
        }catch (Exception e){
            System.out.println(-1);
            return;
        }

        int res = no1 - no2;
        if (no1 - no2 > 0){
            System.out.print(0+" ");
        }else {
            System.out.print(1+" ");
        }
        System.out.println(Integer.toString(res, jin));
    }
}

003 【TLV解码】

TLV编码是按[Tag Length Value]格式进行编码的,一段码流中的信元用Tag标识,Tag在码流中唯一不重复,Length表示信元Value的长度,Value表示信元的值。
码流以某信元的Tag开头,Tag固定占一个字节,Length固定占两个字节,字节序为小端序。
现给定TLV格式编码的码流,以及需要解码的信元Tag,请输出该信元的Value。
输入码流的16机制字符中,不包括小写字母,且要求输出的16进制字符串中也不要包含小写字母;码流字符串的最大长度不超过50000个字节。
输入描述:
输入的第一行为一个字符串,表示待解码信元的Tag;
输入的第二行为一个字符串,表示待解码的16进制码流,字节之间用空格分隔。
输出描述:
输出一个字符串,表示待解码信元以16进制表示的Value。
示例1:
输入
31
32 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00 CC
输出
32 33
说明
需要解析的信元的Tag是31,从码流的起始处开始匹配,Tag为32的信元长度为1(01 00,小端序表示为1);第二个信元的Tag是90,其长度为2;第三个信元的Tag是30,其长度为3;第四个信元的Tag是31,其长度为2(02 00),所以返回长度后面的两个字节即可,即32 33。

/**
 * TLV解码
 * tag 一个字节 //第一行
 * length占2个字节
 * 字节为小端序
 * 1各字节占8位 length 16位
 * 1个16进制数 占2进制多少位? 4位 所以length 占4个数
 *  * //32 00 01 AE
 * //90 00 02 01 02
 * //30 00 03 AB 32 31
 * //31 00 02 32 33
 * //33 0 01 CC
 *  */
public class ZT03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String tag = sc.nextLine();//需要解析的tag
        String stream = sc.nextLine();//所有的tag内容
        Map<String,Inner> map = new HashMap<>();
        //分割所有码流数据,塞到map中
        String[] input = stream.split(" ");
        int idx = 0;
        while (idx < input.length){
            String tagTemp = input[idx];
            String lengthStr = input[idx+2] + input[idx+1];
            idx += 3;
            //计算内容的长度
            int length = Integer.parseInt(lengthStr,16);
            StringBuilder content = new StringBuilder();
            for (int i = idx; i < idx + length; i++) {
                if (i == idx+length -1){
                    content.append(input[i]);
                }else {
                    content.append(input[i]).append(" ");
                }
            }
            map.put(tagTemp,new Inner(length,content.toString()));
            idx += length;
        }

        Inner inner = map.get(tag);
        System.out.println(inner.content);
    }

    static class Inner{
        private int length;
        private String content;

        public Inner(int length, String content) {
            this.length = length;
            this.content = content;
        }
    }
}

004 【VLAN资源池】

VLAN是一种对局域网设备进行逻辑划分的技术,为了标识不同的VLAN,引入VLAN ID(1-4094之间的整数)的概念。定义一个VLAN ID的资源池(下称VLAN资源池),资源池中连续的VLAN用开始VLAN-结束VLAN表示,不连续的用单个整数表示,所有的VLAN用英文逗号连接起来。现在有一个VLAN资源池,业务需要从资源池中申请一个VLAN,需要你输出从VLAN资源池中移除申请的VLAN后的资源池。
输入描述:
第一行为字符串格式的VLAN资源池,第二行为业务要申请的VLAN,VLAN的取值范围为[1,4094]之间的整数。
输出描述:
从输入VLAN资源池中移除申请的VLAN后字符串格式的VLAN资源池,输出要求满足题目描述中的格式,并且按照VLAN从小到大升序输出。
如果申请的VLAN不在原VLAN资源池内,输出原VLAN资源池升序排序后的字符串即可。
示例1:
输入
1-5
2
输出
1,3-5
说明
原VLAN资源池中有VLAN 1、2、3、4、5,从资源池中移除2后,剩下VLAN 1、3、4、5,按照题目描述格式并升序后的结果为1,3-5。
示例2:
输入
20-21,15,18,30,5-10
15
输出
5-10,18,20-21,30
说明
原VLAN资源池中有VLAN 5、6、7、8、9、10、15、18、20、21、30,从资源池中移除15后,资源池中剩下的VLAN为 5、6、7、8、9、10、18、20、21、30,按照题目描述格式并升序后的结果为5-10,18,20-21,30。
示例3:
输入
5,1-3
10
输出
1-3,5
说明
原VLAN资源池中有VLAN 1、2、3,5,申请的VLAN 10不在原资源池中,将原资源池按照题目描述格式并按升序排序后输出的结果为1-3,5。
备注:
输入VLAN资源池中VLAN的数量取值范围为[2-4094]间的整数,资源池中VLAN不重复且合法([1,4094]之间的整数),输入是乱序的。

public class ZT04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] input = sc.nextLine().split(",");
        int search = sc.nextInt();
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < input.length; i++) {
            if (input[i].contains("-")){
                String[] num = input[i].split("-");
                int start = Integer.parseInt(num[0]);
                int end = Integer.parseInt(num[1]);
                for (int j = start; j <end+1 ; j++) {
                    list.add(j);
                }
            }else {
                list.add(Integer.parseInt(input[i]));
            }
        }

        Collections.sort(list);
        list.remove((Object) search);
        //输出
        int idx = 0;
        int start = 0;//1 3 4 5
        int tem = 1;
        StringBuffer sb = new StringBuffer();
        while (idx < list.size()){
            if (start == 0){
                start = list.get(idx);
            }
            if (idx+1 == list.size()){//保证下一位一定存在
                sb.append(start);
                break;
            }
            if (list.get(idx+1) == start+tem){//下一位与当前相等 继续后推
                idx ++;
                tem ++;
                continue;
            }else if (start == list.get(idx)){//输出当前值加,
                sb.append(start).append(",");
                start = 0;
                tem = 1;
            }else {
                sb.append(start).append("-").append(list.get(idx));
                start = 0;
                tem = 1;
                if (idx +1 < list.size()){//当前不是最后一个数据
                    sb.append(",");
                }
            }
            idx ++;
        }
        System.out.println(sb);
    }
}

005 【按身高和体重排队】

某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,对身高相同的人,按体重由轻到重排列;对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。
输入描述:
两个序列,每个序列由n个正整数组成(0 < n <= 100)。第一个序列中的数值代表身高,第二个序列中的数值代表体重。
输出描述:
排列结果,每个数值都是原始序列中的学生编号,编号从1开始
示例1:
输入
4
100 100 120 130
40 30 60 50
输出
2 1 3 4
说明
输出的第一个数字2表示此人原始编号为2,即身高为100,体重为30的这个人。由于他和编号为1的人身高一样,但体重更轻,因此要排在1前面。
示例2:
输入
3
90 110 90
45 60 45
输出
1 3 2
说明
1和3的身高体重都相同,需要按照原有位置关系让1排在3前面,而不是3 1 2

public class ZT05 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int count = Integer.parseInt(sc.nextLine());
        String[] high = sc.nextLine().split(" ");
        String[] weight = sc.nextLine().split(" ");
        List<Player> playerList = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            playerList.add(new Player(i+1,Integer.parseInt(high[i]),Integer.parseInt(weight[i])));
        }
        Collections.sort(playerList);
        for (int i = 0; i < playerList.size(); i++) {
            System.out.print(playerList.get(i).idx+" ");
        }
    }
    
    static class Player implements Comparable<Player>{
        private int idx;
        private int high;
        private int weight;

        public Player(int idx, int high, int weight) {
            this.idx = idx;
            this.high = high;
            this.weight = weight;
        }

        @Override
        public int compareTo(Player ply) {
            if (ply.high > this.high){
                return -1;
            }
            if (ply.weight > this.weight){
                return -1;
            }
            if (ply.idx > this.idx){
                return -1;
            }
            return 0;
        }
    }
}

006 【按索引范围翻转文章片段】

输入一个英文文章片段,翻转指定区间的单词顺序,标点符号和普通字母一样处理。例如输入字符串"I am a developer. “,区间[0,3],则输出"developer. a am I"
String reverseWords(String s, int start, int end)
输入描述:
使用换行隔开三个参数,第一个参数为英文文章内容即英文字符串,第二个参数为翻转起始单词下标(下标从0开始),第三个参数为结束单词下标。
输出描述:
翻转后的英文文章片段所有单词之间以一个半角空格分隔进行输出
示例1:
输入
I am a developer.
1
2
输出
I a am developer.
示例2:
输入
hello world!
0
1
输出
world! hello
说明
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例3:
输入
I am a developer.
0
3
输出
developer. a am I
说明
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
示例4:
输入
Hello!
0
3
输出
EMPTY
说明
指定翻转区间只有一个单词或无有效单词,则统一输出"EMPTY"

public class ZT06 {
    private static String[] content;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        String[] num = sc.nextLine().split(" ");
        System.out.println(reverseWords(input, Integer.parseInt(num[0]), Integer.parseInt(num[1])));
    }
    private static String reverseWords(String str,int start,int end){
        String[] content = str.split(" ");
        while (start < end){
            String temp = "";
            temp = content[end];
            content[end] = content[start];
            content[start] = temp;
            start++;
            end--;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < content.length; i++) {
            sb.append(content[i]);
            if (i+1 < content.length){
                sb.append(" ");
            }
        }
        return sb.toString();
    }
}

007 【报数游戏】

100个人围成一圈,每个人有一个编码,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少?
输入描述:
输入一个整数参数M
输出描述:
如果输入参数M小于等于1或者大于等于100,输出“ERROR!”;否则按照原先的编号从小到大的顺序,以英文逗号分割输出编号字符串
示例1:
输入
3
输出
58,91
说明
输入M为3,最后剩下两个人
示例2:
输入
4
输出
34,45,97
说明
输入M为4,最后剩下三个人

public class ZT07 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        if (num <= 1 || num>= 100){
            System.out.println("ERROR!");
            return;
        }
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 1; i < 101; i++) {
            map.put(i,i);
        }
        int start = 1 ;
        while (map.size() >= num){
            Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
            while (iterator.hasNext()){
                Map.Entry<Integer, Integer> next = iterator.next();
                Integer key = next.getKey();
                map.put(key,start++);
                Integer value = next.getValue();
                if (value == num){
                    iterator.remove();
                    start = 1;
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<Integer, Integer> cou : map.entrySet()) {
            sb.append(cou.getKey()).append(",");
        }
        sb.deleteCharAt(sb.lastIndexOf(","));
        System.out.println(sb);
    }
}

008 【比赛评分】

一个有N个选手参加比赛,选手编号为1~N(3<=N<=100),有M(3<=M<=10)个评委对选手进行打分。打分规则为每个评委对选手打分,最高分10分,最低分1分。
请计算得分最多的3位选手的编号。如果得分相同,则得分高分值最多的选手排名靠前(10分数量相同,则比较9分的数量,以此类推,用例中不会出现多个选手得分完全相同的情况)。
输入描述:
第一行为半角逗号分割的两个正整数,第一个数字表示M(3<=M<=10)个评委,第二个数字表示N(3<=N<=100)个选手。
第2到M+1行是半角逗号分割的整数序列,表示评委为每个选手的打分,0号下标数字表示1号选手分数,1号下标数字表示2号选手分数,依次类推。
输出描述:
选手前3名的编号。
注:若输入为异常,输出-1,如M、N、打分不在范围内。
示例1:
输入
4,5
10,6,9,7,6
9,10,6,7,5
8,10,6,5,10
9,10,8,4,9
输出
2,1,5
说明
第一行代表有4个评委,5个选手参加比赛
矩阵代表是4*5,每个数字是选手的编号,每一行代表一个评委对选手的打分排序,
2号选手得分36分排第1,1号选手36分排第2,5号选手30分(2号10分值有3个,1号10分值只有1个,所以2号排第一)
示例2:
输入
2,5
7,3,5,4,2
8,5,4,4,3
输出
-1
说明:只有2个评委,要求最少为3个评委
示例3:
输入
4,2
8,5
5,6
10,4
8,9
输出
-1
说明:只有2名选手参加,要求最少为3名
示例4:
输入
4,5
11,6,9,7,8
9,10,6,7,8
8,10,6,9,7
9,10,8,6,7
输出
-1
说明:第一个评委给第一个选手打分11,无效分数

public class ZT08 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] num = sc.nextLine().split(",");
        int ma = Integer.parseInt(num[0]);//教练
        int no = Integer.parseInt(num[1]);//选手
        if (ma>10 || ma<3 || no>100 || no<3){
            System.out.println(-1);
            return;
        }
        List<String[]> list = new ArrayList<>();
        for (int i = 0; i < ma; i++) {
            list.add(sc.nextLine().split(","));
        }
        //收集选手信息
        List<Player> players = new ArrayList<>();
        for (int i = 0; i < no; i++) {//第i个选手
            int total = 0;
            List<Integer> listScore = new ArrayList<>();
            for (int j = 0; j < ma; j++) {//第j个裁判
                String[] strings = list.get(j);
                int score = Integer.parseInt(strings[i]);
                if (score<0 || score>10){
                    System.out.println(-1);
                    return;
                }
                listScore.add(score);
                total+= score;
            }
            players.add(new Player(i,total,listScore));
        }
        //比较选手分数
        Collections.sort(players);
        for (int i = 0; i < 3; i++) {
            if (i == 2){
                System.out.println(players.get(i).idx+1);
            }else {
                System.out.print(players.get(i).idx+1 + ",");
            }
        }

    }
    static class Player implements Comparable<Player>{
        private int idx;
        private int total;
        private List<Integer> scores;

        public Player(int idx,int total, List<Integer> scores) {
            this.idx = idx;
            this.total = total;
            this.scores = scores;
        }

        private int checkCount(List<Integer> list,int count){
            int cou = 0;
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i) == count) {
                    cou++;
                }
            }
            return cou;
        }

        @Override
        public int compareTo(Player ply) {
            //先比较总分
            if (ply.total < this.total){
                return -1;
            }else if (ply.total > this.total){
                return 1;
            }else {
                //后比较最高分的数量
                List<Integer> scPly = ply.scores;
                List<Integer> scores = this.scores;
                for (int i = 10; i > 0; i--) {
                    int ipl = checkCount(scPly, i);
                    int ith = checkCount(scores, i);
                    if (ipl < ith){
                        return -1;
                    }
                }
            }
            return 0;
        }
    }
}

009 【查找接口成功率最优时间段】

服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost,找出数组中最长时间段,如果未找到则直接返回NULL。
输入描述:
输入有两行内容,第一行为{minAverageLost},第二行为{数组},数组元素通过空格(" “)分隔,minAverageLost及数组中元素取值范围为0~100的整数,数组元素的个数不会超过100个。
输出描述:
找出平均值小于等于minAverageLost的最长时间段,输出数组下标对,格式{beginIndex}-{endIndx}(下标从0开始),如果同时存在多个最长时间段,则输出多个下标对且下标对之间使用空格(” ")拼接,多个下标对按下标从小到大排序。
示例1:
输入
1
0 1 2 3 4
输出
0-2
说明
A、输入解释:minAverageLost=1,数组[0, 1, 2, 3, 4]
B、前3个元素的平均值为1,因此数组第一个至第三个数组下标,即0-2
示例2:
输入
2
0 0 100 2 2 99 0 2
输出
0-1 3-4 6-7
说明
A、输入解释:minAverageLost=2,数组[0, 0, 100, 2, 2, 99, 0, 2]
B、通过计算小于等于2的最长时间段为:数组下标为0-1即[0, 0],数组下标为3-4即[2, 2],数组下标为6-7即[0, 2],这三个部分都满足平均值小于等2的要求,因此输出0-1 3-4 6-7

public class ZT09 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = Integer.parseInt(sc.nextLine());
        String[] arr0 = sc.nextLine().split(" ");
        int[] arr = new int[arr0.length];
        for (int i = 0; i < arr0.length; i++) {
            arr[i] = Integer.parseInt(arr0[i]);
        }
        int left = 0;
        int right = 0;
        StringBuilder sb = new StringBuilder();
        while (right < arr.length){
            if (left == right){
                right++;
            }
            if (checkAvMin(arr,left,right,num)){//需要查找到最大的数组?
                while (right <arr.length && checkAvMin(arr,left,right,num)){
                    right++;
                }
                right--;
                sb.append(left).append("-").append(right).append(" ");
                right++;
            }else {
                left++;
            }
        }
        System.out.println(sb);

    }

    //给出数组,求平均值是否小于等于某个期望值
    private static boolean checkAvMin(int[] arr,int start,int end,int target){
        double total = 0;
        for (int i = start; i < end+1; i++) {
            total += arr[i];
        }
        double res = total/(end - start +1);
        return res <= target;
    }
}
华为2024机考真题集合 2.中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以 2,所得的结果就是中位数。在实际考试中会随机抽三道题目进行考察,其中两道100分卷题和一道200分卷题,总共400分。幼儿园组织活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个。3.查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数。1.众数是指一组数据中出现次数量多的那个数,众数可以是多个。 阅读详情

相关推荐

华为OD机试 - 比赛评分(Java 2024 B卷 200分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 1632

7.16第一题“竞赛排名”

Description   Input   输入文件为compe.in。文件的第一行为参赛总人数N(1 Output   输出文件为compe.out。文件有N行,从第 一行到第N行依次为排名第1的选手的编号,排名第2的选手的编号……排名第N的选手的编号。 题解 直接模拟,注意n va

CR7ting的CC工作室 893

比赛 一个有N个选手参加比赛

注意!答案仅作为参考(实际考试中下列代码通过用例100%,但不代表最优解) 一个有N个选手参加比赛,选手编号为1~N(3<=N<=100),有M(3<=M<=10)个评委对选手进行打分。打分规则为每个评委对选手打分,最高分10分,最低分1分。 请计算得分最多的3位选手的编号。如果得分相同,则得分高分值最多的选手排名靠前(10分数量相同,则比较9分的数量,以此类推,用例中不会出现多个选手得分完全相同的情况)。 输入描述: 第一行为半角逗号分割的两个正整数,第一个数字表示M(3<=

weixin_44219664的博客 2884

一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选

一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选手的最后得分。要求编程实现: (1)根据n个选手的最后得分,从高到低输出选手的得分名次表,以确定获奖名单; (2)根据各选手的最后得分与各评委给该选手所评分数的差距,对每个评委评分的准确性和评分水准给出一个定量的评价,每位评委的评分方法:(10 -(评委对选手x的评分 - x的得分)^2 的累加和),从高

listboy的博客 1万+

华为OD机考2025B卷 - 密码解密 (Java & Python& JS & C++ & C )

华为OD机考2025B卷 - 密码解密 (Java & Python& JS & C++ & C )

算法大师! 955

华为od机考 Python 【寻找最佳位置】

但是这片沙地上只有特定的一些位置可以种树。小明想要尽可能地增大树之间的距离来更好地防止沙尘暴。你的任务是帮助他找到这样一个距离,使得在这个距离下他可以种下所有的树,而且这个距离是所有可能距离中最大的。在这个例子中,小明可以在位置 1, 7 和 13 上种下三棵树,这样他们之间的最大距离将是 6。输出一个整数,表示在种下所有的树时,可以达到的最大距离。第三行:一个整数,表示小明手中有的树的数量。第一行:一个整数,表示可以种树的位置数量。第二行:一系列的整数,表示可以种树的位置。

wtswts1232的博客 255

OD机考牛客题库 1-10 java

描述对于给定的若干个单词组成的句子,每个单词均由大小写字母混合构成,单词间使用单个空格分隔。输出最后一个单词的长度。输入描述:在一行上输入若干个字符串,每个字符串代表一个单词,组成给定的句子。除此之外,保证每个单词非空,由大小写字母混合构成,且总字符长度不超过 103103。输出描述:在一行上输出一个整数,代表最后一个单词的长度。示例1输入:复制输出:13复制说明:在这个样例中,最后一个单词是 "HelloNowcoder""HelloNowcoder" ,长度为 1313。

qq_41891655的博客 1129

拆解特斯拉Optimus的关节技术:谐波减速器在仿人机器人中的5个精妙设计

本文深度解析特斯拉Optimus仿人机器人关节中的谐波减速器技术,揭示其五大工程突破:微型化材料革命、两万分之一圈精度实现、碳纤维柔轮轻量化、智能运维系统及国产替代方案。重点探讨谐波减速器如何通过创新设计和先进材料实现精准传动,为仿人机器人提供高效可靠的关节动力解决方案。

omega的博客 1075

算法学习——华为机考题库1(HJ1 - HJ10)

算法学习——华为机考题库1(HJ1 - HJ10)

拉依达不拉跨的博客 2236

cadence virtuoso 激励信号源

vpulse,vpwl,vsin,vsource信号源介绍

努力学习的IC小白 3万+

GitHub与GitLab中的Fork操作:从个人仓库到团队协作的完整指南

本文详细介绍了GitHub与GitLab中的Fork操作,从个人仓库到团队协作的完整指南。通过Fork操作,开发者可以在权限隔离的环境下自由实验,并通过合并请求机制保证代码质量。文章涵盖了Fork的具体步骤、本地开发环境配置、代码同步方法以及高级协作技巧,帮助团队高效管理代码仓库。

weixin_28829325的博客 306

牛客网华为机考(HJ1~HJ10)

牛客网华为机考 HJ2 计算某字符出现次数 简单 通过率:31.87% 时间限制:1秒 空间限制:32M知识点[字符串、哈希]写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不......

Yide-Chan的博客 1504

PostgreSQL 超详细安装与使用教程:从入门到实战

本文将详细介绍PostgreSQL数据库的安装配置与基础使用。首先从Windows系统安装入手,分步骤讲解17.5版本的安装流程、环境变量配置及服务启动验证。接着重点介绍了pgAdmin4图形化管理工具的安装与使用,包括界面语言设置、数据库连接、创建与管理数据库等操作,同时对比了可视化操作与SQL命令两种方式。最后梳理了PgSQL基础语法,涵盖表的创建、增删改查操作、约束管理等内容,为初学者提供了完整的PostgreSQL入门指南。文章兼顾理论知识与实际操作,既适合数据库新手学习,也可作为开发人员的快速参考

gtf212的博客 1万+

备战机考:组合、

返回值: string,包含s中从pos开始的len个字符的拷贝(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)发现是for循环中已经有“i++”的前提下,又调用了i++,会导致递归返回后的i+2;所以:i++不只是赋值,还真的改变了i的值;2、并查集:we are a team。一、有关for循环中i++的讨论。1、回溯的组合两道,非重复的没写。二、2025.3.10做的题目。3、分割回文串(只听了听)4、工作安排(01背包)5、长方形中的正方形。

fusujjjj的博客 199

文档多模态识别工具对比:MinerU、PaddleOCR、Marker

本文对比了三款文档多模态识别工具:MinerU、PaddleOCR和Marker。MinerU专注于中文文档的端到端解析,支持复杂元素提取和结构化输出,适合中文论文和教材解析。PaddleOCR是通用OCR工具包,支持多语言和全流程任务,适用于发票、车牌等图像OCR。Marker则注重多语言支持和轻量化部署,适合英文论文和技术文档的快速转换。三者在核心技术、中文优化、表格处理、输出格式、部署复杂度和适用语言等方面各有优劣。选型建议根据具体需求:MinerU适合高精度中文解析,PaddleOCR适合定制化OC

朴拙科技的博客 4744

OpenClaw 完整部署教程

版本:OpenClaw 2026.2.13更新日期:2026-02-26适用系统:Linux (Ubuntu/Debian/CentOS)

qq_39436086的博客 2318

Nepire的校OJ入门题解——丢人的机考(二)

好的这次机考确实丢人了,啥也没准备心态爆炸,全程划水等死,被疯狂diss后还是觉得写点博客记录一下 水题,解一个方程组,可以口算也可以程序跑 i*20=j*15 j*15=k*18 (i*10+j*5+k*1)%100=0 int main() { printf("50,60,45,80\n"); return 0; }

Nepire的博客 433

数据去重复_京东商品评论情感分析|文本数据预处理

本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据,对其作情感分析,显然没有价值,得出的文本挖掘结果也不尽人意。所以对于文本评论数据先进行文本预处理是必不可少的一步,把大量的、冗余的、无价值的信息去除,可以极大提高文本数据的质量,精确文本分析结果。1 文本去重1.1文本去重的原因文本数据预处理时,首先应去除文本评论数据中反...

weixin_34556808的博客 2074

计算机考试为什么试题不能复制,3月ACCA考试开场——ACCA机考复制粘贴究竟可不可以?...

各位ACCA考生们!今天已经是ACCA考试的第二天了!大家考的怎么样呀?对自己还满意吗?不过,小编围观了一下战况,发现大家对ACCA机考模式还是很陌生,有很多疑问。小编整理一些关于机考的问题,希望能帮助到大家!01·平时打字有联想输入,考试的时候没有很不习惯!相信大家都有所了解,自2021年起,ACCA的考试全面采用闭卷、计算机化考试方式。和之前的笔试模式不同,需要考生在计算机终端获取试题、作答并...

weixin_32234493的博客 1837

CloudCompare 二次开发:插件中的 PCL 环境配置与编程

在进行 CloudCompare 的二次开发过程中,我们常常需要使用点云库(Point Cloud Library,简称 PCL)来处理和分析点云数据。在 CloudCompare 的界面中,选中一个点云对象,然后点击菜单栏中的 “插件” -> “MyPluginAction”。插件将对选中的点云对象进行体素滤波处理,并更新显示结果。下面我们将展示一个简单的插件编程示例,该示例使用 PCL 对输入的点云数据进行体素滤波处理。方法进行体素滤波处理,并将结果点云赋值给选中的点云对象。文件并点击 “打开”。

2301_79331387的博客 283

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

银行报班前必问的10个问题:搞清楚这些再交钱

提醒大家一句:报班前一定要问清楚这些问题,真的不能瞎选。选对了,事半功倍;选错了,白花冤枉钱不说,还耽误备考时间。 一、交钱之前,一定要问清楚 很多人选机构,就是听销售一顿忽悠,脑子一热就交钱了。结果交了钱才发现,这也不对、那也不对,想退还退不了,特别憋屈。 其实,很多坑,只要你报之前多问几句,就能避开。今天就给大家列10个报班前必问的问题,搞清楚了再交钱,不吃亏。 二、问题1:师资是什么背景? 第一个要问的,就是师资。老师好不好,直接

abi1021的博客 10

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为OD机考C卷分弹珠游戏Java解法:从DFS到动态规划优化

在华为OD机考中,双机位在线编程模式对考生的算法设计与工程实现能力提出了更高要求。面对“分弹珠”这类分配型题目,核心考点往往不是表面上的计数问题,而是动态规划的状态定义与转移优化。理解从暴力DFS到记忆化搜索,再到滚动数组与前缀和优化的演进路径,能够帮助候选人高效应对中等难度的C卷题目。这类问题还常被包装成“分糖果”“分苹果”等不同形式,掌握题型识别方法后可举一反三。本文以Java语言为例,拆解分弹珠游戏的完整求解过程,结合取模、边界处理等实战细节,为正在备战华为OD机考的开发者提供可落地的解题参考。

weixin_34221654的博客 117

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为OD机考:或门电路故障的二进制位交换问题解析

二进制位运算是计算机科学中的基础概念,通过逻辑门电路实现与、或、非等基本操作。在硬件设计和算法优化中,理解位运算原理至关重要。本文以或门电路故障检测为切入点,探讨当二进制数的两个比特位随机交换时,如何高效计算影响或运算结果的情况数。通过分析位交换对或运算结果的影响条件,提出时间复杂度为O(N)的优化算法,并给出Java实现示例。该问题在硬件测试、芯片缺陷定位等工程场景具有实用价值,特别适合考察二进制数据处理和算法优化能力。

weixin_32612263的博客 310

GESP二级机考“优美的数字”:拆位与整除判断全解析

在计算机编程入门与等级考试中,对整数的逐位拆解与整除判断是基础且高频的算法思想。拆位即通过对10取模获取最低位、再整除10移除该位,从而将多位数分离成独立数字。这一原理不仅用于判断数字性质,更是进制转换、回文数、水仙花数等经典问题的根基。结合循环与布尔标志位,可以高效验证“每一位都能整除原数”这类条件。在实际的GESP二级机考中,“优美的数字”正是这一技术点的典型应用,同时考察了拆位、除零判断与逻辑与运算。掌握临时变量保存原数、先判0再取模等细节,就能从容应对考场陷阱。以该题为例,从读题、算法推导到C++与

weixin_31960565的博客 98

双机位机考实战:基站维修工程师Java实现与TSP解法解析

旅行商问题(TSP)是路径规划与组合优化中的经典模型,其核心在于求解遍历所有节点并返回起点的最短回路。状态压缩动态规划和回溯全排列是应对小规模TSP的两种主流算法,前者以二进制状态刻画访问情况,适合n≤12的精确求解;后者凭借直观的DFS逻辑,常用于算法笔试与在线机考场景。在双机位在线考试日益普及的今天,代码实现之外,操作规范性同样影响最终成绩。文章以“基站维修工程师”真题为例,详细对比Java实现中全排列与状态压缩DP的细节,并结合双机位监考约束,剖析输入解析、边界处理、考场防呆检查等工程实践要点,帮助备

weixin_31236101的博客 223

华为机考辅导

树之类的题目,输入输出构造会比较花时间,练习的时候多留意输入输出构造,机试可以节省很。对于进阶部分,图往往伴随着深度优先和广度优先出现,我建议优先广度优先深度优先、二叉树。考试过程须控制好做题节奏,切记不要在一道题目上花费过多的时间,合理分配时间。型汇总,对于题型汇总中的高权重题型,建议掌握下这个方法,非高频的以后再说。面的题目描述的确比较详细,大家可以参考,然后根据描述去搜索答案。,如果对于这些题目都有思路并且能解答,那么恭喜你,可以准备考试。模式),平时刷题需要注意区分,多刷需要自己构造的。

HelloWowofei的博客 5万+
上一篇: Tomcat-线程模型及设计精髓
下一篇: 机考[11-20]
旧梦昂志
博客等级 码龄7年 3724粉丝 68原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧梦昂志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值