⽜客⽹华为机试题(持续更新)
1 计算字符串最后⼀个单词的长度,单词以空格隔开,字符串长度⼩于5000。
解题思路:到最后⼀个空格的下标,然后⽤输⼊的字符串长度减去空格的下标,再减1
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//输⼊⼀整⾏
String Line();
//到最后⼀个空格的下标
int i = line.lastIndexOf(' ');
/
/⼀整⾏字符串的长度
int length = line.length();
//⽤字符串的长度-(空格的下标+1),因为下标是从0开始的
System.out.println(length-i-1);
}
}
2 计算字符个数
写出⼀个程序,接受⼀个由字母、数字和空格组成的字符串,和⼀个字母,然后输出输⼊字符串中该字母的出现次数。不区分⼤⼩写,字符串长度⼩于500。
解题思路:1 先将所有字符串改成⼩写。2 需要求出次数的字符⽤ “”代替 3 求出替换前后的字符串的长度之差
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//输⼊
String Line();
//将line中所有的字符转成⼩写
String lowerLine = LowerCase();
//将输⼊的字符也改成⼩写
String target=(()).toLowerCase();
//输⼊字符改⽤""替代这⾥直接是英⽂状态下的双引号,中间⽆空格
String temp = place(target,"");
/
/两个字符串的长度之差,即为⽬标需要的长度
System.out.println(lowerLine.length()-temp.length());
}
}
3 明明的随机数
明明想在学校中请⼀些同学⼀起做⼀项问卷调查,为了实验的客观性,他先⽤计算机⽣成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留⼀个,把其余相同的数去掉,不同的数对应着不同的学⽣的学号。然后再把这些数从⼩到⼤排序,按照排好的顺序去同学做调查。请你协助明明完成“去重”与“排序”的⼯作(同⼀个测试⽤例⾥可能会有多组数据(⽤于不同的调查),希望⼤家能正确处理)。
注:测试⽤例保证输⼊参数的正确性,答题者⽆需验证。测试⽤例不⽌⼀组。
当没有新的输⼊时,说明输⼊结束。
分析:
输⼊⼀个数字N,代表输⼊数字的最⼤数量。
题⽬很长,但是实质是数字的去重和排序。利⽤Treeset的特性进⾏排序和去重
import java.util.Set;
import java.util.TreeSet;
public class Main{
public static void main(String [] args){
Scanner scanner =new Scanner(System.in);
while(scanner.hasNext()){
//代表第⼀⾏输⼊的随机整数N
int Int();
//        新建⼀个空的TreeSet
Set<Integer> set=new TreeSet<Integer>();
//        将新输⼊的数字加⼊到treeSet⾥⾯
for(int i=0;i<N;i++){
set.Int());
}
set.forEach(n->{
System.out.println(n);
});
}
}
}
4 字符串分隔
题⽬描述
连续输⼊字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
·长度不是8整数倍的字符串请在后⾯补数字0,空字符串不处理。
解题思路:⽤StringBuilder对象操作前后不产⽣新对象的特性来处理
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in =new Scanner(System.in);
while(in.hasNext()){
String str = in.nextLine();
/
/构造新的StringBuilder对象,参数为输⼊的String 对象
StringBuilder sb =new StringBuilder(str);
while(sb.length()>8){
//当sb的长度⼤于8时,打印前8个字符
System.out.println(sb.substring(0,8));
//删掉前8个字符(delete的参数是左闭右开),如果长度还是⼤于8,继续循环,否则进⼊下⼀步                sb.delete(0,8);
}
//如果长度⼩于8,就给sb后⾯添加“0”,直到长度==8
while(sb.length()>0&& sb.length()<8){
sb.append("0");
}
if(sb.length()==8) System.out.println(sb);
}
}
}
5 进制转换
输⼊⼗六进制的数字,输出对应的⼗进制数
解题思路:⽤Integer.decode⽅法进⾏进制转换
public class Main {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
String line =  Line();
//使⽤Integer.decode⽅法直接进⾏进制转换
System.out.println(Integer.decode(line));
}
}
}
6 质数因⼦
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
/
/⽤平⽅根简化取值范围
long Long();
long count=(long)Math.sqrt(num);
for(long i=2;i<=count;++i){
//当输⼊的数字可以被2整除时,输出2 同时数字变成除以2的商值,然后继续除以2,直到不能被2整除,然后条件++
while(num%i==0){
System.out.print(i+" ");
num =num/i;
}
}
//直到num为1的时候不再输出
System.out.println(num==1?" ":num+" ");
}
}
7 取近似值
写出⼀个程序,接受⼀个正浮点数值,输出该数值的近似整数值。如果⼩数点后数值⼤于等于5,向上取整;⼩于5,则向下取整。解题思路:四舍五⼊,und⽅法
8 合并表记录
public class Main {nextint()方法
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
while(sc.hasNext()){
int next = sc.nextInt();
//            新建TreeMap
TreeMap<Integer,Integer> map =new TreeMap<>();
for(int i =0; i < next; i++){
int key = sc.nextInt();
int value = sc.nextInt();
ainsKey(key)){
map.put((key)+value);
}else{
map.put(key,value);
}
}
for(Map.Entry<Integer, Integer> integerIntegerEntry : Set()){
System.out.Key()+" "+Value());
}
}
}
}
9 提取不重复的数字
输⼊⼀个int型整数,按照从右向左的阅读顺序,返回⼀个不含重复数字的新的整数。
保证输⼊的整数最后⼀位不是0。
解题思路:1 将输⼊的int类型数字转换成字符串2由于是反转“数字,那么最后连续的数字必然不可以是连续的0 3”在2的基础上⽤StringBuilder的reserve⽅法将字符串反转 4去重复 5 遍历输出
public class Main {
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
int next = sc.nextInt();
String s = next +"";
StringBuilder sb =new StringBuilder(s);
while(sb.charAt(sb.length()-1)=='0'){
sb.delete(sb.length()-1, sb.length());
}
String str = sb.toString();
char[] chars = CharArray();
List<Character> list=new ArrayList<>();
for(int i =0; i < chars.length; i++){
if(!ains(chars[i])){
list.add(chars[i]);
}
}
list.forEach(n->{
System.out.print(n);
});
}
}
## 10 统计不同字符的种类数量
编写⼀个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换⾏表⽰结束符,不算在字符⾥。不在范围内的不作统计。多个相同的字符只计算⼀次
例如,对于字符串abaca⽽⾔,有a、b、c三种不同的字符,因此输出3
解题思路
1 将输⼊的字符串转换成char数组。
2 对数组进⾏遍历,将char类型的元素转换成对应的数字
3 如果满⾜条件 字符在ACSII码范围内且 list集合中不含有该元素,就将数组内符合条件的元素放⼊到list集合⾥⾯
4 最后输出list集合的size
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String ();
char[] chars = s.toCharArray();
List<Character> lis=new ArrayList<>();
for(int i =0; i < chars.length; i++){
int a=(int)chars[i];
if(a>0&&a<127){
if(!ains(chars[i])){
lis.add(chars[i]);
}
}
}
System.out.println(lis.size());
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。