牛客华为java:汽水瓶、明明的随机数、进制转换

牛客华为研发工程师编程题: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<n;i++){
                inArray[i] = sc.nextInt();
            }
            // 排序
            Arrays.sort(inArray);
            // 去重
            int []outArray = new int[n];
            for(int i=0,k=0;i<n;i++){
                if(i==0){
                    outArray[k] = inArray[i];
                    System.out.println(outArray[k]);
                    k++;
                }else{
                    if(inArray[i] == outArray[k-1]){
                        continue;
                    }else{
                        outArray[k] = inArray[i];
                        System.out.println(outArray[k]);
                        k++;
                    }
                }
            }       
        }
    }
    
  • 解答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<Integer> set = new TreeSet<>();
                for(int i=0;i<num;i++){
                    set.add(sc.nextInt());
                }
                for(Integer integer : set){
                    System.out.println(integer);
                }
            }    
        }
    }
    

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<s.length();i++){
                char c = s.charAt(i);
                int n = 0;
                if(c<='E' && c>='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));
        }
    }
    

    parselntvalueof区别?
    ① 返回值不同
    parselnt返回值是int型
    valueof返回值是Integer型
    ② valueof就是调用了parselnt方法的
    ③ parselnt效率比valueof效率高

    在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值