【牛客】从青铜到王者01,阿里Java研发岗二面

输入要买的苹果,输出最少需要的袋子。

示例;


输入

20

输出

3 

注意题目要求用最少的袋子去装苹果,就要注意条件了,通过穷举发现6个苹果装的袋子不会超过4个,所以外面的大循环就是6个袋子的匹配,需要最少的袋子那么6个苹果的袋子就要尽可能的少。每次都是以差值2递增,就是加一个8个苹果的袋子,减少一个6个苹果的袋子。


import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        int n = scan.nextInt();

        int flg=0;

        //两个数字相加只能是偶数。

        if(n%2==1){

            System.out.println(-1);

            return;

        }

        //用8个苹果装的一般就是用最少的袋子

        if(n%8==0){

            System.out.println(n/8);

            return;

        }

       for(int i=0;i<4;i++){

           for(int j=0;j<13;j++){

               if(n==(6*i+8*j)){

                   System.out.println(i+j);

                   flg=1;

                   return;

	               }

	           }

	       }

	       if(flg==0){

	           System.out.println(-1);

	      }

	 }

} 

三、进制转换

=========================================================================

题目链接

题目描述:给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数。

示例:


输入

7 2

输出

111 

进制转换需要用到辗转相除法来完成进制转换,十六进制还需要先将字母存储到数组中,在进行判断选择。

牛客的测试用例还有负数,需要加上一个判断,才能通过


import java.util.*;

public class Main{

    public static void main(String [] args){

       Scanner scan=new Scanner(System.in);

        int a=scan.nextInt();

        int b=scan.nextInt();

        StringBuffer sb=new StringBuffer();

        char []ch={'A','B','C','D','E','F'};

        int temp=0;  int flg=1;//判断是否为负数

        while(a!=0){

            if(a<0){

                a=-a;

                flg=0;



            }

            temp=a%b;

            if(temp>9){

                sb.append(ch[temp-9-1]);

            }else {

                sb.append(temp);

            }

     a=a/b;



         }

        if(flg==0){

            sb.append('-');

        }

        System.out.println(sb.reverse().toString());//将字符串逆序输出

    }

    

} 

四、连续最大和

==========================================================================

题目链接

题目描述:一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3

输入两行 第一行为数字串的长度,第二行为数字串

示例:


输入

3

-1 2 1

输出

3 

要理解题目意思才能做出正确的答案,是将连续子数组最大和,并不是将正数相加,遇到负数置零,也要加负数进行比较,并且测试用例中还有纯负数,就要返回数组中最大的一个数值了


import java.util.*;

public class Main{

    public static void main(String[] args){

        Scanner sc=new Scanner(System.in);

        while(sc.hasNext()){


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值