您的位置:首页 > 编程语言 > Java开发

华为oj题目(java版)

2016-01-25 13:11 531 查看
趁着临近过年,公司工作不忙,去刷了一下华为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<string1.length();i++)
{
if(string1.charAt(i)==a)
count++;
}
System.out.println(count);

}
}


题目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<Integer> set = new HashSet<>();
int n = in.nextInt();
for(int i=0;i<n;i++){
set.add(in.nextInt());
}
List<Integer> 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<ch.length;i++){
if(ch[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<Character> charSet = new HashSet<Character>();
int count = 0;
for(int i=0;i<str.length();i++){
char ch = str.charAt(i);
if(!charSet.contains(ch)){
charSet.add(ch);
int ascii = Integer.valueOf(str.charAt(i));
if(ascii>=0 && ascii<=127){
count++;
}
}

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


知识点:java获取ascii码可用Integer.valueOf();
扩展:另一种方法不用set,直接拼接字符串可能更高效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: