poj1017

题目大意:

    存在1*1、2*2、3*3、4*4、5*5、6*6的几种底面积不同但高度相同的产品以及相应的包装盒,现在告诉你每种规格的产品的数量,要求你求出最少要用多少的包装盒。不同的产品只要装的下就可以装在同一个包装盒中。

#include<stdio.h>
int main()
{
    int a[7],i,ans;
    int flag=0;
    while(1){
        ans=flag=0;
        for(i=1;i<=6;i++){
            scanf("%d",&a[i]);
            flag+=a[i];
        }
        if(!flag)
            break;
        ans+=a[6];a[6]=0;
        ans+=a[5]; a[1]-=(a[5]*11);a[5]=0;
        ans+=a[4];
        if(a[2]>=a[4]*5){
            a[2]-=a[4]*5;
        }else{
            a[1]-=(20*a[4]-a[2]*4);
            a[2]=0;
        }
        ans+=a[3]/4;
        if(a[3]%4!=0){
            ans+=1;
            a[3]%=4;
            if(a[2]<=0){
                a[1]-=(36-a[3]*9);
            }
        else{
            if(a[3]==1){
                if(a[2]>=5){
                    a[2]-=5;
                    a[1]-=7;
                }else{
                   a[1]-=(27-a[2]*4);
                   a[2]=0;
                }
            }
            else if(a[3]==2){
                    if(a[2]>=3){
                        a[2]-=3;
                        a[1]-=6;
                    }else{
                        a[1]-=18-a[2]*4;
                        a[2]=0;
                    }
            }
            else if(a[3]==3){
                if(a[2]>=1){
                    a[2]-=1;
                    a[1]-=5;
                }else{
                 a[1]-=9;
                }
            }
        }
    }
        if(a[2]>0){
            ans+=a[2]/9;
            if(a[2]%9!=0){
                ans+=1;
                a[2]%=9;
                a[1]-=(36-a[2]*4);
            }
        }
        if(a[1]>0){
            ans+=a[1]/36;
            if(a[1]%36!=0)
                ans+=1;
        }
          if(ans)
            printf("%d\n",ans);
    }
}
更有大神代码,mark!
#include<stdio.h>
int main(){
    int n,a,b,c,d,e,f,x,y;
    int u[4]={0,5,3,1};
    while(1){
        scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
        if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0)
            break;
        n=d+e+f+(c+3)/4;
        y=5*d+u[c%4];
        if(b>y)
            n+=(b-y+8)/9;
        x=36*n-36*f-25*e-16*d-9*c-4*b;
        if(a>x)
            n+=(a-x+35)/36;
        printf("%d\n",n);
    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值