准备面试华为外包德科,记录一下一些面试题;
牛客网代码提交的坑,可以看一下下面的第一道题,ide本地编译通过,牛客网死活不通过,提交代码提示:返回非0。原因分析
查询得知,结果非零的意思的代码退出的时候不是以正常的0退出的,而是非0状态,也就是代码出错了百思不得其解,到底为什么?平常写函数的时候,遇到特定条件,直接return返回,那return后面的代码将不会被执行,看到有一个C++代码网友反馈说return会被牛客网shell提交框替换成print,意思是会给你重新编排一次。这时候return就会出问题,return后面的代码会继续执行。
所以个人建议写代码不要写方法,直接写在main方法内部就行了。
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
/*** Created by chens* Date: 2021/1/18*/import java.util.Scanner;/*** 华为机试题1* 原型:* 计算字符串最后一个单词的长度,单词以空格隔开。*/
public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int stinglength = Line());System.out.Line());System.out.println(stinglength + "");}/*** * 输入描述:* * 输入一行,代表要计算的字符串,非空,长度小于5000。* * 输出描述:* * 输出一个整数,表示输入字符串最后一个单词的长度。** @param inputstring* @return*/public static int getStinglength(String inputstring) {//排除最后一个字符是空格的情况if (inputstring.charAt(inputstring.length() - 1)==' '){inputstring= inputstring.substring(0, inputstring.length() - 1);}System.out.println(inputstring);//数组反向输出字符串,计算最后一个单词的长度int con = 0;char[] chars = CharArray();for (int i = chars.length - 1; i > 0; i--) {if (chars[i] != ' ') {con++;} else {return con;}}return 0;}
}
第一次通过测试不成功,原因是写了return方法,可能是我的一个习惯,不喜欢直接写在main方法里面,喜欢单独写一个方法调用。后面进行了代码的修改,并且换了一种更简单的字符串charAt方法的使用
public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String str = Line();//排除最后一位是空格的情况if (str.charAt(str.length() - 1) == ' ') {str = str.substring(0, str.length() - 1);}String[] split = str.split(" ");int length = split[split.length - 1].length();System.out.println(length);}}
输入描述:
第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字母。
输出描述:
输出输入字符串中含有该字符的个数。
import java.util.Scanner;/*** Created by chens* Date: 2021/1/18*/
public class test2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//获取字符,并转换为小写字母String str = Line().toLowerCase();String str1 = Line().toLowerCase();String replace = place(str1, "");int i = str.length() - replace.length();System.out.println(i);}
}
注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。
当没有新的输入时,说明输入结束。
输入描述:
注意:输入可能有多组数据。每组数据都包括多行,第一行先输入随机整数的个数N,接下来的N行再输入相应个数的整数。具体格式请看下面的"示例"。
输出描述:
返回多行,处理后的结果
输入
3
2
2
1
11
10
20
40
32
67
40
20
89
300
400
15
输出
1
2
10
15
20
32
40
67
89
300
400
说明
样例输入解释:
样例有两组测试
第一组是3个数字,分别是:2,2,1。
第二组是11个数字,分别是:10,20,40,32,67,40,20,89,300,400,15。
import java.util.*;
/*** @author chens* Date: 2021/1/18*/
public class Test3 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {int num = sc.nextInt();TreeSet set = new TreeSet();for (int i = 0; i < num; i++) {set.Int());}Iterator iterator = set.iterator();while (iterator.hasNext()) {System.out.());}}}
}
中途遇到一次意外,把输出循环语句写在while方法外面,编译不通过,不知道为什么,感觉牛客的代码校验问题还很大。
输入描述:
连续输入字符串(输入多次,每个字符串长度小于100)
abc
123456789
输出描述:
输出到长度为8的新字符串数组
abc00000
12345678
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** @author chens* Date: 2021/1/19*/
public class Test4{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s = "";int length = 8;while (scanner.hasNext()) {s = s + Line();while (s.length() > 8) {System.out.println(s.substring(0,8));s = s.substring(8);}length = s.length();if (s.length() != 0) {for (int i = 0; i < (8 - length); i++) {s = s + "0";}System.out.println(s);s = "";}}}
}
输入描述:
输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,请参考帖子。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用n隔开。
写一个方法调用的误区,刚开始直接调用了valueof方法,最后一直报错,终于找得到了原因;
输入格式
0xA
0xAA
,但是,但是这个时候调用Integer.valueOf(s, 16)方法的时候是直接根据方法内第二个参数判断进制,(重点来了)进入到源码中我们可以看到,0XAA会被直接进行16进制的转换并且会把 代码16进制标识的0X也进行转换,我们知道16进制是从0-F,那么这个X转换肯定就会有问题,于是就报错了。因此需要截取字符串
import java.util.Scanner;/*** @author chens* Date: 2021/1/19*/
public class Test5 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String s = Line();s = s.substring(2);//截断前两位0X字符Integer integer = Integer.valueOf(s, 16);System.out.String());}}
}
import java.URL;
import java.util.*;/*** @author chens* Date: 2021/1/20*/
public class Test6 {/*** 功能:输入一个long整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )最后一个数后面也要有空格*/public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Long i = Long();if (i != 1) {double max = Math.sqrt(i);for (long j = 2; j <= max; j++) {while (i % j == 0) {System.out.println(j + " ");i = i / j;}}}System.out.println(i== 1 ? "": i+" ");}
}
import java.util.Scanner;/*** @author chens* Date: 2021/1/20*/
public class Tets7 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String string = Line();String[] strings = string.split("\.");Double dot = Double.valueOf("0."+strings[1]);int index = Integer.parseInt(strings[0]);Double max = 0.5;if (dot >= max) {index += 1;}System.out.println(index);}
}
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
示例1
输入
复制
4
0 1
0 2
1 2
3 4
输出
复制
0 3
1 2
3 4
import java.util.*;/*** @author chens* Date: 2021/1/21*/
public class Test8 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int count = Integer.Line());Map<Integer, Integer> hash = new HashMap();for (int i = 0; i < count; i++) {String nextLine = Line();Integer key = Integer.valueOf(nextLine.split(" ")[0]);Integer value = Integer.valueOf(nextLine.split(" ")[1]);if (ainsKey(key)) {hash.put(key, (key) + value);} else {hash.put(key,value);}}ArrayList<Integer> ts = new ArrayList<Integer>(hash.keySet());Collections.sort(ts);for (Integer t : ts) {System.out.println(t+" "(t));}}
}
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
输入 9876673 输出 37689
package Machine_test;import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;/*** @author chens* Date: 2021/1/21*/
public class Test9 {public static void main(String[] args){Scanner sc = new Scanner(System.in);String s = sc.nextLine();StringBuffer sb = new StringBuffer(s);//放入动态字符串sb = sb.reverse();//反转Set<String> set = new HashSet<String>();for(int i=0;i<sb.length();i++){if(set.add(sb.substring(i,i+1))){System.out.print(sb.substring(i,i+1));}}}
}
边工作、变刷题,美滋滋。
例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。
package Machine_test;import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;/*** @author chens* Date: 2021/1/21*/
public class Test10 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);char[] chars = Line().toCharArray();Set<Character> set = new HashSet();for (int i = 0; i < chars.length; i++) {if (chars[i] > 0 && chars[i] < 127) {set.add(chars[i]);}}System.out.println(set.size());}
}
package Machine_test;import java.util.Scanner;/*** @author chens* Date: 2021/1/21*/
public class Test11 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);StringBuffer stringBuffer = new Line());System.out.verse());}
}
做到这个地方,有些感觉,单纯的追求编码速度的话,这种方法还可以。但是运算速度并不高。如果采用字符数组或者单纯的字符串循环手动输出,速度还要更快。
package Machine_test;import java.util.Scanner;/*** @author chens* Date: 2021/1/21*/
public class Test11 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);String[] s = Line().split(" ");for (int i = s.length - 1; i > 0; i--) {System.out.print(s[i] + " ");}System.out.print(s[0]);}
}
本文发布于:2024-02-04 05:59:43,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170700544652896.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |