华为oj题目(java版)

趁着临近过年,公司工作不忙,去刷了一下华为oj题目,特此记录一下。

       

       题目地址:我是在牛客网上刷的题,地址:http://www.nowcoder.com/ta/huawei


      题目1:

题目描述:

写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。


输入描述:
 
   

输入一个有字母和数字以及空格组成的字符串,和一个字符。


输出描述:
 
   

输出输入字符串中含有该字符的个数。


输入例子:
ABCDEF
A

输出例子:
1
个人解答:

import java.util.Scanner;
public class Main{
    public static void main(String[] args)
        {
            int count = 0;
            Scanner sc=new Scanner(System.in);
            String str = sc.nextLine();
            String br = sc.nextLine();
             
            String string1=str.toUpperCase();
            String br1=br.toUpperCase();
 
            char a = br1.charAt(0);
             
            for(int i=0;i

题目2:

题目描述

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


import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] strArray = str.split("\\s");
        int size = strArray.length;
        System.out.println(strArray[size-1].length());
    }
}
知识点1:字符串长度用length(),数组长度用length

知识点2:空格符分割:"\\s"或者"\\s+"


题目3:

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            Set set = new HashSet<>();
            int n = in.nextInt();
            for(int i=0;i list = new ArrayList<>();
            list.addAll(set);
            Collections.sort(list);
            for(int i:list){
                System.out.println(i);
            }
        }
    }
}

这道题另一个思路直接用treeMap特性,但是很奇怪一直通不过,最后用上面方式就可以

题目4:

题目描述

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。

思路1:用java自带方法

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.next().substring(2);
            System.out.println(Integer.parseInt(str,16));
        }
    }
}
思路2:自己实现

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            StringBuffer sb=new StringBuffer();
            sb.append(sc.next());
            //String str=sc.next();
            String str=sb.reverse().substring(0,sb.length()-2);
            char ch[]=str.toCharArray();
            int sum=0;
            for(int i=0;i='A'&&ch[i]<='F'){
                    sum+=(Integer.valueOf(ch[i])-55)*Math.pow(16,i);
                }else {
                    sum+=(Integer.valueOf(ch[i])-48)*Math.pow(16,i);
                }
            }
            System.out.println(sum);
           // System.out.println(Integer.valueOf('6'));
        }
    }
 
}


题目4:

题目描述

•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextLine()){
            String str = scanner.nextLine();
            split(str);
        }
    }
    
    public static void split(String s){
        while(s.length()>=8){
            System.out.println(s.substring(0,8));
            s = s.substring(8);
        }
        if(s.length()>0 && s.length()<8){
            s = s+"00000000";
            System.out.println(s.substring(0,8));
        }
    }
}

这道题刚开始没好的思路,后来发现添加数字0不用考虑那么复杂,先加满8个0,再做截取就行

知识点:string

题目5:

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        long num = scanner.nextLong();
        System.out.println(getResult(num));
    }
    
    public static String getResult(long ulDataInput){
        int i = 2;
        String result = "";
        while(ulDataInput != 1){
            while(ulDataInput%i==0){
                ulDataInput = ulDataInput/i;
                result =result+i+" ";
            }
            i++;
        }
        return result;
    }
}

题目6:
写出一个程序,接受一个浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。 
import java.util.*;
import java.math.*;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        float f = scanner.nextFloat();
        System.out.println(Math.round(f));
    }
}

此题比较简单,主要利用了jdk math自带的round方法

题目7:

编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。


import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        Set charSet = new HashSet();
        int count = 0;
        for(int i=0;i=0 && ascii<=127){
                count++;
              }
            }

        }
        System.out.println(count);
    }
}

知识点:java获取ascii码可用Integer.valueOf();

扩展:另一种方法不用set,直接拼接字符串可能更高效。

你可能感兴趣的:(Java)