华为机试题

第一章、HJ1计算字符串最后一个单词的长度,单词以空格隔开。

1.1)描述

描述
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
在这里插入图片描述

1.2)解题

import java.util.Scanner;

public class Main{

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String st = sc.nextLine();
        String[] s = st.split("\\s+") ;//或者st.split(" ");
        int length = s[s.length - 1].length();
        System.out.println(length);
    }
    }

第二章、算法题HJ2 计算某字符出现次数

1.1)题目描述

题目描述:
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)

输入描述:
第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。

输出描述:
输出输入字符串中含有该字符的个数。(不区分大小写字母)

示例:
在这里插入图片描述

1.2)解题思路与答案

解题思路:
①查看示例是不关心大小写的,所以需要将大写转为小写
②将s1需要查找的字符串(即s2)全部替换为 “”
③将原来的字符串长度-替换过后的字符串长度=出现的次数

答案:

    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        // 输入第一个字符串并且全部转小写
        String s1 = input.nextLine().toLowerCase();
        // 输入单个字符串并且转小写
        String s2 = input.nextLine().toLowerCase();
        // 完整字符的长度-单个字符长度 = 出现的次数
        int num = s1.length() - s1.replaceAll(s2,"").length();
        System.out.println(num);
    }

第三章、算法题HJ3 明明的随机数

1.1)题目描述

题目描述:
明明生成了NN个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。

数据范围: 1 \le n \le 1000 \1≤n≤1000 ,输入的数字大小满足 1 \leval \le 500 \1≤val≤500

输入描述:
第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。

输出描述:
输出多行,表示输入数据处理后的结果

示例:
在这里插入图片描述

1.2)解题思路与答案

解题思路:
①将数据存入TreeSet集合进行去重+排序
②遍历输出数据

答案:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //获取总个数
        int num = sc.nextInt();
        //创建TreeSet进行去重排序
        TreeSet se = new TreeSet();
        //输入num个数据
        for(int i =0 ; i < num ;i++){
            se.add(sc.nextInt());
        }
        Iterator iterator = se.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

第四章、算法题HJ4 字符串分隔

1.1)题目描述

题目描述:
描述
•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;

•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:
连续输入字符串(每个字符串长度小于等于100)

输出描述:
依次输出所有分割后的长度为8的新字符串

示例:
在这里插入图片描述

1.2)解题思路与答案

Luo_xguan的解题思路:
1.获取输入的字符串
2.判断字符串长度,小于8,在后面补上0,达到8位,大于8,先以8位作为
一段截取,再判断剩余字符串长度与8比较,如果小于8,照上述操作,大于8,先截取8位,再判断剩下的…如此循环操作。

答案:

import java.util.Scanner;
/**
 * @author lxg
 * @description 字符串分割
 * @date 2021/9/26
 */
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while(input.hasNextLine()){
            String s = input.nextLine();
            split(s);
        }
    }

    public static void split(String s){
        while(s.length()>=8){
            System.out.println(s.substring(0,8));
            s=s.substring(8);
        }
        if(s.length()<8 && s.length()>0){
            s+="00000000";
            System.out.println(s.substring(0,8));
        }
    }
}

第五章、算法题HJ5 进制转换

1.1)题目描述

题目描述:
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在

输入描述:
输入一个十六进制的数值字符串。

输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。

示例:
在这里插入图片描述

1.2)解题思路与答案

解题思路:
①使用Java自带的Integer.parseInt(String,16) 方法

答案:

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String s = sc.nextLine();
            System.out.println(Integer.parseInt(s.substring(2,s.length()),16));
        }
    }
}

1.3)派仔的解题思路与答案

①res = res * BASE + map.get(ch); 这个公式是精华原理如图:
在这里插入图片描述

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Putest {
    private final static int BASE = 16;
    private static Map<Character, Integer> map = new HashMap<Character, Integer>()
    {{
        put('0', 0);
        put('1', 1);
        put('2', 2);
        put('3', 3);
        put('4', 4);
        put('5', 5);
        put('6', 6);
        put('7', 7);
        put('8', 8);
        put('9', 9);
        put('A', 10);
        put('B', 11);
        put('C', 12);
        put('D', 13);
        put('E', 14);
        put('F', 15);
        put('a', 10);
        put('b', 11);
        put('c', 12);
        put('d', 13);
        put('e', 14);
        put('f', 15);
    }};

    public static int getDecimal(String number) {
        int res = 0;
        char [] arr =number.toCharArray();

        for( int i=0;i<arr .length;++i){
        //这个公式是精华,map.get()方法返回指定键所映射的值
            res = res * BASE + map.get(arr[i]);
        }

  /*      也可以这样写循环
  for (char ch : number.toCharArray()) {
            //这个公式是精华,map.get()方法返回指定键所映射的值
            res = res * BASE + map.get(ch);
        }*/
        return res;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String number = in.next();
            int res = getDecimal(number.substring(2));
            System.out.println(res);
        }
    }
}

第六章、算法题HJ6 质数因子

1.1)题目描述

题目描述:
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
在这里插入图片描述

输入描述:
输入一个整数

输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。

示例:
在这里插入图片描述
在这里插入图片描述

1.2)文的盲的解题思路与答案

解题思路:
①试除法是一种简单有效的方法,可以快速找到给定数的质因数。首先,从最小的质数2开始,不断用给定数去除,如果能整除,则找到一个质因数,并将其记录下来。然后将商作为新的数,继续用质数去除,直到商变为1为止。这样就可以找到给定数的所有质因数。
②因为一个正整数最多有一个质因子大于其平方根,且只会是其本身所以我们判断数 num 是不是质数时,没必要从 2 一直尝试到 num 一样,此题中的大循环也大可不必写一个到 num 的循环,写到 根号num即可,如果此时数字还没有除数,则可判定其本身是一个质数,没有再除下去的必要了,直接打印其本身即可:

答案:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    long num = scanner.nextLong();
    long k = (long) Math.sqrt(num);

    for (long i = 2; i <= k; ++i) {
        while (num % i == 0) {
            System.out.print(i + " ");
            num /= i;
        }
    }
    System.out.println(num == 1 ? "": num+" ");
}

第七章、算法题HJ7 取近似值

1.1)题目描述

题目描述:
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。
数据范围:保证输入的数字在 32 位浮点数范围内

输入描述:
输入一个正浮点数值

输出描述:
输出该数值的近似整数值

示例:
在这里插入图片描述

1.2)第一种解题思路与答案

派仔的解题思路:
①浮点数强转int时,直接舍掉小数,只留下整数。

答案:

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double number = in.nextDouble();
        System.out.println((int)(number + 0.5));
    }
}

1.3)第二种解题思路与答案

解题思路:
①Java中的Math.round()方法是将浮点型进行“四舍五入”转换为int类型的一个方法

答案:

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Double d = sc.nextDouble();
        System.out.println((int)Math.round(d));
    }
}

第八章、算法题HJ8 合并表记录

1.1)题目描述

题目描述:
数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。
提示:
0 <= index <= 11111111
1 <= value <= 100000

输入描述:
先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开

输出描述:
输出合并后的键值对(多行)

示例:
在这里插入图片描述

1.2)解题思路与答案

fuxiaoxian的解题思路:
①使用map, 然后要自动排序,就可是使用treeMap
②用map自带的getOrDefault方法,如果根据key没有值,就用默认的0表示方法的值,如果能根据key找到对应的值,那么直接赋值

答案:

import java.util.*;
public class Main {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            TreeMap<Integer,Integer>  map = new TreeMap<>();
            while(sc.hasNext()){
                int n = sc.nextInt();
                for(int i =0;i<n;i++){
                    int key = sc.nextInt();
                    int value = sc.nextInt();
                    map.put(key,map.getOrDefault(key,0)+value);
                }
                for(Integer i : map.keySet()){
                    System.out.println(i+" "+map.get(i));
                }
            }
       }
}

相关推荐

  1. 华为试题-字符串压缩

    2024-04-10 11:00:02       22 阅读
  2. 华为试题-最小矩阵

    2024-04-10 11:00:02       17 阅读
  3. 华为试题-密码输入检测

    2024-04-10 11:00:02       18 阅读
  4. 牛客网华为试题说明三

    2024-04-10 11:00:02       15 阅读
  5. 牛客网华为试题说明一

    2024-04-10 11:00:02       13 阅读
  6. 华为OD试题:字符串变换最小字符串

    2024-04-10 11:00:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 11:00:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 11:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 11:00:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 11:00:02       20 阅读

热门阅读

  1. git-es6-promisem面试

    2024-04-10 11:00:02       13 阅读
  2. ES6 => 箭头函数

    2024-04-10 11:00:02       13 阅读
  3. Hermite 多项式

    2024-04-10 11:00:02       12 阅读
  4. 使用UDP完成网络单词查询,利用dict数据库

    2024-04-10 11:00:02       13 阅读
  5. Request 读取窗体变量四种方式

    2024-04-10 11:00:02       14 阅读
  6. 深度学习神经网络模型微调

    2024-04-10 11:00:02       16 阅读
  7. React中如何实现父组件调用子组件的方法

    2024-04-10 11:00:02       15 阅读
  8. Unity之Unity面试题(四)

    2024-04-10 11:00:02       13 阅读
  9. 无人机空气动力学

    2024-04-10 11:00:02       14 阅读
  10. Linux_CentOS学习笔记

    2024-04-10 11:00:02       16 阅读
  11. LeetCode 671. 二叉树中第二小的节点

    2024-04-10 11:00:02       17 阅读
  12. 蓝桥杯备考随手记: 递归

    2024-04-10 11:00:02       17 阅读