【搜狐笔试题】产品包装

【搜狐笔试题】产品包装_第1张图片

解题思路

从面积大的开始取,一个6*6的箱子可以装一块5*5的产品剩下11个 1*1的空间。装一块4*4的板子剩下5个2*2的空间。 一个6*6的箱子可以取四块3*3的空间,在一块6*6箱子上装3*3的产品数目为 1 2 3 4 的时候剩下 2*2的板子分别为 5 3 1 0,剩余部分还可以去1*1的产品。 若2*2的板子有剩余,还可以分割成1*1的板子。

#include  
#include  
int dir[4]={0,5,3,1};  
int a[10];  
int main()  
{  
    int i,sum,ans;  
    while(1)  
    {  
        sum=0;  
        for(i=1;i<7;++i)  
        {  
            scanf("%d",&a[i]);  
            sum+=a[i];  
        }  
        if(!sum)  
            break;  
        ans=a[6]+a[5]+a[4]+(a[3]+3)/4;//计算边长为3 4 5 6的板子消耗量   
        int cnt_2=a[4]*5+dir[a[3]%4];  
        if(a[2]>cnt_2)  
            ans+=(a[2]-cnt_2+8)/9;//当上面剩余的2*2板子量不足时,需要消耗新的板子   
        int cnt_1=ans*36-a[6]*36-a[5]*25-a[4]*16-a[3]*9-a[2]*4;  
        if(a[1]>cnt_1)//当上面剩余的1*1板子量不足时,需要消耗新的板子   
            ans+=(a[1]-cnt_1+35)/36;  
        printf("%d\n",ans);  
    }  
    return 0;  
}   

在这里直接参考了裁板子的思路,http://blog.csdn.net/zwj1452267376/article/details/50428543

你可能感兴趣的:(2017.08搜狐笔试题)