搜狐第2道为什么不对,用一些用例测试是可以过额

Scanner in = new Scanner(System.in);

        ArrayList<int[]> list=new ArrayList<int[]>();

        while (in.hasNextInt()) {//注意while处理多个case

         int count=0;

         int[] arr=new int[6];

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

                 arr[i]=in.nextInt();

                 if(arr[i]==0)count++;

             }

             if(count!=6)list.add(arr);

             else

                 break;

        }

       

       for(int i=0;i<list.size();i++){

            int count=0;//计数器

            int[] arr=list.get(i);

            for(int j=5;j>=0;j--){

                if(arr[j]==0)continue;

                else{

                int sum=(j+1)*(j+1)*arr[j];//存放(j+1)*(j+1)的总容量

                //需要包裹数

                    if(sum<36){

                    count++;

                    }else if(sum%36==0){//刚好存满容量36

                    count+=sum/36;

                    continue;

                    }

                    else{

                    count+=(sum/36+1);

                    }

                    int n=sum/36+1;

                    //max

                    int max=36/((j+1)*(j+1));

                    max=arr[j]>max?max:arr[j];//每个36中存放最多(j+1)*(j+1)产品的个数

                    for(int k=0;k<n;k++){

                    //leave empty

                    int dif=36-max*(j+1)*(j+1);//剩余容量

                    if(j==4||j==5){//1*1

                    if(arr[0]<=dif)

                    arr[0]=0;

                    else{

                    arr[0]-=dif;

                    }

                    }

                    if(j==3){//2*2 1*1

                    int s=arr[1]*4;

                    if(s<=dif){

                    arr[1]=0;

                    dif-=s;

                    if(arr[0]>dif){

                    arr[0]-=dif;

                    }else

                    arr[0]=0;

                    }else{//put all 2*2

                    arr[1]-=dif/4;

                    }

                    }

                    if(j==2){//2*2 1*1 almost put 4ge 2*2

                    if(arr[j]==3){//1

                    if(arr[1]>0){

                    arr[1]-=1;

                    dif-=4;

                    }

                    }

                    if(arr[j]==1){//5

                    if(arr[1]>4){

                    arr[1]-=5;

                    dif-=5*4;

                    

                    }else{

                    dif-=arr[1]*4;

                    arr[1]=0;

              

                    }

                    }

                    if(arr[j]==2){//3

                    if(arr[1]>2){

                    arr[1]-=3;

                    dif-=12;

                    

                    }else{

                    dif-=arr[1]*4;

                    arr[1]=0;

                    }

                    }

                    if(dif>=arr[0])

            arr[0]=0;

            else

            arr[0]-=dif;

                    }

                    if(j==1){//1*1

                    if(dif>=arr[0])

            arr[0]=0;

            else

            arr[0]-=dif;

                    }

                    }

                }

            }

            

            System.out.println(count);

        }

    }

全部评论

相关推荐

点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务