
华为机试
安卓面试-鸽巢原理
2023年2月17日发(作者:基站建设)华为机试题Java实现(附详解)
华为机试题Java实现(附详解,持续更新)
本⽂章是我做的华为机试题⽬,有些是⾃⼰写的,有些是参考解答,都做了详细备注,都能看懂,有时间陆陆续更新完。
1.计算⼀个字符串最后⼀个单词长度,单词⽤空格隔开
思路:本题使⽤split()⽅法将字符串按空格切割成字符串数组保存即可,数组最后⼀个元素(字符串)的长度即为答案。
r;
publicclassMain{
publicstaticvoidmain(String[]args){
Scannersc=newScanner();
Stringstrs=ne();
lengthOfLastString(strs);
}
staticvoidlengthOfLastString(Stringstrs){
String[]arr=("");
n(arr[-1].toCharArray().length);
}
要注意的是:1.若String结尾是空格,可以使⽤split("",-1)解决,原⽣split是不识别末尾元素的;
2.特殊分割要使⽤转译符
2.写出⼀个程序,接受⼀个由字母和数字组成的字符串,和⼀个字符,然后输出输⼊输⼊字符串中含有该字符的个数。不区分⼤⼩写
r;
publicclassMain{
publicstaticvoidmain(String[]args){
Scannersc=newScanner();
Stringstrs=ne();
//将输⼊的字符串转成char型便于⽐较
charch1=ne().charAt(0);
intcount=0;
char[]arrs=Array();
for(charch:arrs){
//char类型没有忽略⼤⼩写⽐较,但是可以直接将都转成⼤写或者⼩写⽐较
if(rCase(ch)==rCase(ch1)){
count++;
}
}
n(count);
}
}
3.明明想在学校中请⼀些同学⼀起做⼀项问卷调查,为了实验的客观性,他先⽤计算机⽣成了N个1到1000之间的随机整数
(N≤1000),对于其中重复的数字,只保留⼀个,把其余相同的数去掉,不同的数对应着不同的学⽣的学号。然后再把这些数从⼩到⼤
排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的⼯作(同⼀个测试⽤例⾥可能会有多组数据,希望⼤家能
正确处理)
r;
t;
publicclassMain{
//要求不重复-set
//不重复的同时还要有序-TreeSet
publicstaticvoidmain(String[]args){
Scannersc=newScanner();
//不接收到停⽌符号就⼀直输⼊,默认键盘crtl+z停⽌,或者给终⽌符t(‘0’)
while(t()){
intn=t();//随机数由输⼊产⽣
TreeSettreeSet=newTreeSet();//要装包装类型
if(n>0){
for(inti=0;i //将由输⼊产⽣的随机数加⼊set,重复的加不进,默认按照⾃然排序 (t()); } } for(Integeri:treeSet){ n(i); } } } } 4.连续输⼊字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;长度不是8整数倍的字符串请在后⾯补数字0,空字符串不处 理。 r; publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); while(t()){ Stringstrs=ne(); if(()%8!=0){//长度不够8的整数倍补7个0 strs=strs+"0000000"; } while(()>=8){ //现在字符串长度肯定⼤于等于8,将其8个8个截取,最后扔的肯定是补得0,没有影响 n(ing(0,8));//⼤于8,肯定够截取 //substring(begin,end),从begin位到end长度分割字符串,不够报错 strs=ing(8); } } } } 5.写出⼀个程序,接受⼀个⼗六进制的数,输出该数值的⼗进制表⽰。(多组同时输⼊) a.⽅法⼀ 使⽤BigInteger BigInteger:Java⾥⼤数值类,理论上数值不会越界(和计算机内存相关),是个String,但是不能直接赋值,必须调⽤构造器,⾥⾯提供了⼀些⽅法例如add等 (运算⽤⽅法,不是+,-,*,/)。 //16进制转10进制 eger; r; publicclasssixteethTOten{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); while(t()){ Stringstr16=ne(); n(newBigInteger(str16,16).toString(10)); } } } b.⽅法⼆ r; publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); while(t()){ //为什么截取2,因为⼗六进制数有两种表⽰⽅法,fff,0xfff,第⼆中显然要截取前⾯的标志 Stringstr=().substring(2); //nt(str,x),将str转成x进制 n(nt(str,16)); } } } //⾃⼰写实现16-10 publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); while(t()){ StringBuffersb=newStringBuffer(); (()); //Stringstr=(); Stringstr=e().substring(0,()-2); charch[]=Array(); intsum=0; for(inti=0;i<;i++){ if(ch[i]>='A'&&ch[i]<='F'){ sum+=(f(ch[i])-55)*(16,i); }else{ sum+=(f(ch[i])-48)*(16,i); } } n(sum); //n(f('6')); } **6.题⽬描述 数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进⾏合并,即将相同索引的数值进⾏求和运算,输出按照key值升 序进⾏输出。 输⼊描述:先输⼊键值对的个数然后输⼊成对的index和value值,以空格隔开 输出描述:输出合并后的键值对(多⾏)** ; r; p; publicclassmapQuChong{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); while(t()){ //TreeMap按照Key的⾃然⼤⼩排序 Mapmap=newTreeMap(); intn=t(); for(inti=0;i intk=t(); intvalue=t(); //如果键已经存在则合并 if(nsKey(k)){ (k,(k)+value); }else{ //不存在就说明⽆键重复,加⼊map (k,value); } } //输出map for(Integerkey:()){ n(key+""+(key)); } } } } 7.输⼊⼀个int型整数,按照从右向左的阅读顺序,返回⼀个不含重复数字的新的整数。 输⼊描述: 输⼊⼀个int型整数 输出描述: 按照从右向左的阅读顺序,返回⼀个不含重复数字的新的整数 r; publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); intnum=t(); intresult=0; //构建⼀个⼗⼤⼩的数组,将反向遍历的数的下标位置标记成1,每次判断该数组下标位置是否为0,即可判断是否重复 int[]arr=newint[10]; while(num!=0){ //从最后⼀位遍历,反向int if(arr[num%10]==0){ result=result*10+num%10;//实现从右到左 arr[num%10]++;//将该数字对应下标值置1 num/=10; }else{ //该位置下标值不为0,说明有重复,直接删除 num/=10; } } n(result); } } 8.编写⼀个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换⾏表⽰结束符,不算在字符⾥。不在范围内的 不作统计。注意是不同的字符 r; publicclassStringBuChong{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); Stringstr=ne(); intcount=0; for(inti=0;i<();i++){ //判断每⼀个字符是否在范围内,并且是否是唯⼀,indexOf该字符在字符串中⾸次出现的索引位置,lastIndexOf,最后出现位置 if((i)>0&&(i)<127&& f((i))==i){ count++; } } n(count); } } 9.输⼊描述: 输⼊⼀个int整数 输出描述: 将这个整数以字符串的形式逆序输出 r; publicclassintReverse{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); intnum=t(); Stringstr=num+""; char[]chars=Array(); char[]rechars=newchar[()]; for(inti=()-1;i>=0;i--){ rechars[()-1-i]=chars[i]; } //Stringresult=ng(); Stringresult=newString(rechars); n(result); } } /** *int转String *+""; *StringtoString() * *String转int *publicstaticintparseInt(Strings) * *String转Integer *publicstaticIntergervalueOf(Strings) * *String转char[] *Array() * *char[]转String *string1=newString(chars); string2=f(chars); * */ 10.字符串反转(也可以⽤8的⽅式) r; publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(); Stringstr=ne(); StringBufferrestr=newStringBuffer(str); n(e().toString()); } } 先更新⼗题,后⾯的题⽬要涉及⼀些算法了,整理好了再更新