牛客网-在线编程-华为机部分试题及答案

取近似值(整数取证)

接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

5.5 6

import java.util.*;
public class Main {
    
    
    public static void main(String[] args){
    
    
        String str = new Scanner(System.in).nextLine();
        int index = str.indexOf(".");
        int a = Integer.parseInt(str.substring(0,index));
        int b = Integer.parseInt(str.substring(index+1,index+1+1));
        int z;
        if(b>=5){
    
     //  主要判断第一个小数位是否>=5
            z = a+1;
        }else{
    
    
            z = a;
        }
        System.out.println(z);
    }
}

数字颠倒 & 字符逆序 & 字符串反转

输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

1516000 00006151
I am a student tneduts a ma I
adbc dcba

import java.util.*;
public class Main {
    
    
    public static void main(String[] args)  {
    
    
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String sb = new String("");
        for(int i=str.length()-1; i>=0; i--){
    
     // 倒叙循环将每一个 字符 追加至 ""
            sb+=str.charAt(i);
        }
        System.out.println(sb.toString());
    }
}

原串翻转

import java.util.*;
public class Reverse {
    
    
    public String reverseString(String iniString) {
    
    
        return new StringBuffer(iniString).reverse().toString(); // StringBuffer直接reverse
    }
}

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

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

hello nowcoder 8

import java.util.*;
public class Main{
    
    
    public static void main (String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] arr = str.split(" "); // 转为String[],然后取最后一个元素的length()
        System.out.print(arr[arr.length-1].length());
    }
}

明明的随机数

生成了N个1到1000之间的随机整数,去重,从小到大排序

注意:输入可能有多组数据。每组数据都包括多行,第一行先输入随机整数的个数N,
接下来的N行再输入相应个数的整数。具体格式请看下面的"示例"。

样例有两组测试
第一组是3个数字,分别是:2,2,1。
第二组是11个数字,分别是:10,20,40,32,67,40,20,89,300,400,15。

import java.util.*;
  
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
    
     // 输入可能有多组数据,要保证每一组都能进入程序处理
            int num = sc.nextInt();
            TreeSet<Integer> set = new TreeSet<Integer>(); // TreeSet保证了去重唯一
            for(int i = 0 ; i < num ;i++){
    
    
                int curr = sc.nextInt();
                set.add(curr);
            }
            for(Integer i : set){
    
    
                System.out.println(i);
            }
        }
    }
}

字符串分隔(每8个分隔)

连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;

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

import java.util.*;
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNextLine()){
    
    
            String s=scanner.nextLine();
            while(s.length()>=8){
    
    
                System.out.println(s.substring(0, 8)); 
                s=s.substring(8); // 每次打印8个字符,然后截断8个,最后剩下的额外处理
            }
            if( s.length()<8 && s.length()>0  ){
    
     // 如果剩余0个字符,刚好打印完就不管了,这里只管1-7个字符
                s=s+"0000000"; // 这里只需要7个字符"0"即可
                System.out.println(s.substring(0, 8));
            }
        }
    }
}

提取不重复的整数

输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是0。

9876673 37689

import java.util.*;

public class Main{
    
    
     public static void main(String[] args){
    
    
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        StringBuffer sb = new StringBuffer(str);
        Set s = new HashSet();// 利用set去重
        sb.reverse();// 字符串反转
        for(int i = 0;i<sb.length();i++){
    
    
           if(s.add(sb.substring(i,i+1))){
    
     // set不允许重复添加相同的元素
        	   System.out.print(sb.substring(i,i+1));
           }
        }
    }
}

?最长回文子串

给定一个仅包含小写字母的字符串,求它的最长"回文子串"的长度。
回文串,指左右对称的字符串。
子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串
(注意:记得加上while处理多个测试用例)
cdabbacc 4 abba

import java.util.Scanner;
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
    
    
        	String input = sc.next();
        	System.out.println(Main.getNumber(input));    	
        }
 	}
    public static int getNumber(String str){
    
    
    	int result = 1;
    	StringBuffer sb = new StringBuffer(str);
    	String temp = sb.reverse().toString(); //将字符串反转
    	//获取所有子串,查看翻转后的字符串是否包含该子串
    	for(int i = temp.length(); i >= 1 ;i--){
    
    
    		//i为子串的长度
    		for(int j = 0; j <= temp.length()-i;j++){
    
    
    			String tempSubString = temp.substring(j,j + i);
    			if(str.contains(tempSubString)){
    
    
    				return i;
    			}
    		}
    	}
    	return result;
    }
}

字符个数统计

例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。

import java.util.*;

public class Main {
    
    
    public static void main (String[] args){
    
    
        Scanner sc = new Scanner(System.in);
        char[] ch  = sc.nextLine().toCharArray();
        int count = 0;
        String len = "";
        for( int i=0; i<ch.length; i++ ){
    
    
            // 如果len中不包含这个字符,就追加进去,count++
            if( ! len.contains(  String.valueOf(ch[i]) )  ){
    
    
                len+=ch[i];
                count++;
            }
        }
        System.out.print(count);
    }
}

合并表记录

数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
先输入键值对的个数

然后输入成对的index和value值,以空格隔开
4
0 1
0 2
1 2
3 4

0 3
1 2
3 4
import java.util.*;
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
    
    
            int k = sc.nextInt();
            int v = sc.nextInt();
            // 利用map 的 k v数据结构,存储index和value值
            if (map.containsKey(k)) {
    
    
                map.put(k, map.get(k) + v);
            } else
                map.put(k, v);
        }
        for (Integer key : map.keySet()) {
    
    
            System.out.println(key + " " + map.get(key));
        }
    }
}

单词倒排(用" "间隔)

对字符串中的所有单词进行倒排。
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;

import java.util.Scanner;
public class Main{
    
    
    public static void main(String[] args){
    
    
        Scanner sc = new Scanner(System.in);
        //不管间隔符几个,都会被正则当做一个整体来分割成String[]
        String[] sp = sc.nextLine().split("[^a-zA-Z]+");
        StringBuilder sb = new StringBuilder();
        for (int i=sp.length-1; i>=0; i--){
    
    
            sb.append(sp[i] + " ");// 反向追加至新的字符串,用" "拼接
        }
        System.out.println(sb.toString().trim());// 别忘了去掉最后一个" "
    }
}

找出字符串中第一个只出现一次的字符

题目中要求:输入几个非空字符串(不止一个,所以要 while(sc.hasNext() )

还有要求:输出第一个只出现一次的字符,如果不存在输出-1

import java.util.Scanner; 
public class Main {
    
      
    public static void main(String[] args) {
    
     
        Scanner sc = new Scanner(System.in); 
        while(sc.hasNext()){
    
    
            String str = sc.nextLine();
            char[] arr = str.toCharArray();
            String s = "-1"; //题目要求没有满足的字符,就打印-1, 所以默认值-1
            for(int i = 0; i < arr.length; i++){
    
     // for循环从左往右,自然找到的满足的字符就是 第一个要找的
                // 如果第一次出现和最后一次出现的坐标是同一个
                if(str.indexOf(arr[i]) == str.lastIndexOf(arr[i])){
    
    
                    s = arr[i]+"";
                    break;
                }
            } 
            System.out.println(s);
        }    
    } 
}

统计字符(英文 空格 数字 其他字符的数量)

import java.util.*;
public class Main{
    
    
    public static void main(String[] args){
    
    
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextLine()){
    
     // 多组输入
            String[] rawStrings = scanner.nextLine().split(" ");
            int[] count = new int[4];
            count[1] = rawStrings.length-1; // 用空格split,数组长度-1就是空格的数量
            for (String s : rawStrings){
    
    
                for (int i = 0; i < s.length(); i++){
    
    
                    if (  (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') || (s.charAt(i) >= 'a' && s.charAt(i) <= 'z')){
    
    
                        count[0] += 1;
                    }else if (s.charAt(i) >= '0' && s.charAt(i) <= '9'){
    
    
                        count[2] += 1;
                    }else{
    
     // 剩下的就全都是其他字符了
                        count[3] += 1;
                    }
                }
            }
            for (int num : count){
    
    
                System.out.println(num);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/vayne_xiao/article/details/113245894