牛客华为研发工程师编程题:https://www.nowcoder.com/test/1088888/summary
1、汽水瓶
题目:
某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。
小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
思路:
除3取整和取余。如果最后只剩2个空瓶,这是特殊情况,可以借一瓶喝了,凑一瓶还他。
解答:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
int n = sc.nextInt();
if(n == 0) break;
int result = solution(n);
System.out.println(result);
}
}
private static int solution(int n){
int result = 0;
while(n>=3){
result += n/3;
// 此时有的汽水瓶,是喝后换回来的 加 还没有喝的
n = n/3 + n%3;
}
if(n==2){
result++;
}
return result;
}
}
2、明明的随机数
题目:
明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
思路1:
sort排序,然后去重——如果当前输入数组与输出数组的最后一个相同,则跳过
思路2:
使用集合set,treeset二叉树排序且不重复
TreeSet方法可参考:https://my.oschina.net/u/4265488/blog/3918220)
解答1:
import java.util.Scanner;
import java.util.*;
public class Main{
public static void main(String[] args){
// 输入
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int []inArray = new int[n];
for(int i=0;i 解答2:
import java.util.*;
public class Main
{
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
3、进制转换
题目:
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
思路1:
读出每一位,每一位读出后,最终值=之前值*16+当前值
思路2:
使用java自带的进制转换
解答1:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 去除0x
int sum = 0;
String s = sc.next();
for(int i=2;i='A'){
n = c -'A' +10;
}else{
n = c -'0'
}
sum = sum*16 +n;
}
System.out.println(sum);
}
}
解答2:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int sum = 0;
String input = sc.next();
// 去除0x
String ans = input.substring(2);
// 也可以使用
// Integer.parseInt(ans, 16)
System.out.println(Integer.valueOf(ans, 16));
}
}
parselnt跟valueof区别?
① 返回值不同
parselnt返回值是int型
valueof返回值是Integer型
② valueof就是调用了parselnt方法的
③ parselnt效率比valueof效率高



