搜狐第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);

        }

    }

全部评论

相关推荐

比亚迪汽车新技术研究院 硬件工程师 总包21左右 硕士
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务