笔试题—华为机试~待续

本文介绍了多个Java编程题目,包括获取字符串最后一个单词的长度、计算特定字符出现次数、字符串分隔、进制转换、质数因子、取近似值、合并表记录、提取不重复的整数、字符个数统计、数字颠倒和字符串反转等。解法涵盖了多种思路和技巧,适合Java初学者和进阶者练习。
摘要由CSDN通过智能技术生成

以下题的有关补充知识

第一部分(简单题):

HJ1 字符串最后一个单词的长度

解法一

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        
        int current = 0;
        char br = ' ';
        
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == br){
                current = 0;
            }else{
                current++;
            }
        }
        System.out.println(current);
    }
}

解法二
while(sc.hasNextLine()):读取用空格分隔开的数字字符串,然后将其存入数组(刷题时常用)
Sline = line.substring(line.lastIndexOf(" ")+1):从空格后第一个字符开始截取

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String line = sc.nextLine();
            line = line.substring(line.lastIndexOf(" ")+1);
            System.out.println(line.length());
        }
    }
}

HJ2 计算某字符出现次数

解法一:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String ch = sc.nextLine();
        
        Pattern compile = Pattern.compile(ch,Pattern.CASE_INSENSITIVE);
        Matcher matcher = compile.matcher(str);
        
        int count = 0;
        while(matcher.find()){
            count++;
        }
        System.out.println(count);
    }
}

解法二:

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        //将输入的字符串转成char型便于比较
        char ch1 = sc.nextLine().charAt(0);
        int count = 0;
        char[] arrs = str.toCharArray();
        
        for(char ch:arrs){
            //char类型没有忽略大小写比较,但是可以直接转成大写或者小写比较
            if(Character.toUpperCase(ch) == Character.toUpperCase(ch1)){
                count++;
            }
        }
        System.out.println(count);
    }
}

HJ4 字符串分隔

解法一:

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        while(sc.hasNextLine()){
            String str = sc.nextLine();
            if(str.length() % 8 != 0){//长度不够8的整数倍补7个0
                str = str+"0000000";
            }
            while(str.length() >= 8){
                //现在字符串长度肯定大于等于8,将其8个截取,最后扔的肯定是补得0
                System.out.println(str.substring(0,8));
                str = str.substring(8);
            }
        }
    }
}

HJ5 进制转换

解法一:公式

import java.util.Scanner;
import java.lang.Math;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String str = sc.nextLine();
            int count = 0;//记录转换后的数字
            
            for(int i = 0; i < str.length() - 2; i++){
                //由于前面两位都是'0x',故从第三位开始
                char ch = str.charAt(i+2);
                int t = 0;//记录字母转换成的数值
                
                //将字母转换为数值
                if(ch>='0' && ch<='9')
                    t = ch - '0';
                //字母'A'/'a' - 'F'/'f'对应数字10~15
                else if(ch>='A' && ch<='F')
                    t = ch - 'A' + 10;
                else if(ch>='a' && ch<='f')
                    t = ch - 'a' + 10;
                //计算加和
                count += t * Math.pow(16,str.length()-i-3);
            }
            System.out.println(count);
        }
    }
}

解法二:

import java.util.Scanner;

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

HJ6 质数因子

解法一:

import java.util.Scanner;
import java.lang.Math;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        long num = sc.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 取近似值

解法一:
对获取数字加0.5后强转为整数型,如果元数据小数部分>=0.5,则+0.5强转后,整数部分进一

import java.util.Scanner;

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

解法二:

import java.util.Scanner;
import java.lang.Math;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            System.out.println((int)Math.round(sc.nextDouble()));
        }
    }
}

HJ8 合并表记录

解法一:

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        while(sc.hasNext()){
            int next = sc.nextInt();
            TreeMap<Integer,Integer> map = new TreeMap<>();
            
            for(int i = 0; i < next; i++){
                int key = sc.nextInt();
                int value = sc.nextInt();
                if(map.containsKey(key)){
                    map.put(key,map.get(key)+value);
                }else{
                    map.put(key,value);
                }
            }
            
            for(Map.Entry<Integer,Integer> integerIntegerEntry : map.entrySet()){
                System.out.println(integerIntegerEntry.getKey()+" "+integerIntegerEntry.getValue());
            }
        }

HJ9 提取不重复的整数

解法一:

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char[] chars = str.toCharArray();
        //set中的LinkedHashSet就是有序的
        LinkedHashSet<Character> set = new LinkedHashSet<>();
        for(int i = chars.length - 1; i >= 0; i--){
            set.add(chars[i]);
        }
        
        str = "";
        Iterator<Character> it = set.iterator();
        while(it.hasNext()){
            str += it.next();
        }
        System.out.println(str);
    }
}

解法二:

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
       
        //逆序排序
        StringBuilder stringBuilder = new StringBuilder(sc.nextLine()).reverse();
        String str = stringBuilder.toString();
        
        //结果集
        StringBuilder result = new StringBuilder();
        
        for(int i = 0; i < str.length(); i++){
            if(str.indexOf(str.charAt(i)) == i){
                result.append(str.charAt(i));
            }
        }
        System.out.println(result.toString());
        
    }
}

HJ10 字符个数统计

❤解法一:

import java.util.*;
import java.util.stream.Collectors;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        HashSet<Character> set = new HashSet<>();
        String line = sc.nextLine();
        char[] chars = line.toCharArray();
        for(char achar:chars){
            set.add(achar);
        }
        
        set.stream().filter(c->Integer.valueOf(c) >= 0 
                            &&
                           Integer.valueOf(c) <= 127).collect(Collectors.toSet()
                            );
        System.out.println(set.size());
    }
}

解法二:

import java.util.HashSet;
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        HashSet<Character> hs = new HashSet<Character>();
        
        for(int i = 0; i < str.length(); i++){
            hs.add(str.charAt(i));
        }
        System.out.println(hs.size());
    }
}

HJ11 数字颠倒

解法一:

import java.util.*;
import java.lang.String;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        while(sc.hasNextInt()){
            int number = sc.nextInt();
            System.out.println(new StringBuffer(String.valueOf(number)).reverse());
        }
    }
}

解法二:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s = bf.readLine();
        StringBuilder sb = new StringBuilder(s);
        System.out.print(sb.reverse().toString());
    }  
}

解法三:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(bf.readLine());
        
        ArrayList<Character> temp = new ArrayList<>();
        
        String s = num + "";//转换为字符串
        
        //存入ArrayList,逆序存入
        for(int i = s.length() - 1; i >= 0; i--){
            temp.add(s.charAt(i));
        }
        s = "";
        for(Character character : temp){
            s += character;
        }
        System.out.println(s);
        
    }
}

HJ12 字符串反转

解法一:栈的特性

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Stack<Character> stack = new Stack<>();
        String s = sc.next();
        char[] chars = s.toCharArray();
        for(int i = 0; i < s.length(); i++){
            stack.push(chars[i]);
        }
        while(!stack.isEmpty()){
            System.out.print(stack.pop());
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值