POJ 1017

#include<iostream>


using namespace std;


int main()
{
int s1[4]={0,7,6,5}; //根据n3%4,判断此包中填入3*3,尽可能填2*2后还能填入1*1的个数(数组下标分别对应取余的0,1,2,3)
int s2[4]={0,5,3,1}; //根据n3%4,判断此包中填入3*3后还能填入的2*2的个数
int n1,n2,n3,n4,n5,n6,t1,t2,sum;
while(cin>>n1>>n2>>n3>>n4>>n5>>n6&&n1+n2+n3+n4+n5+n6!=0)
{


sum=n6+n5+n4+n3/4; //先计算出填完6,5,4,3所需的包的个数
if(n3%4!=0) //如果3*3填完后有剩余,补充一个包
sum++;
t2=5*n4+s2[n3%4]; //所能填入的2*2的包
t1=11*n5+s1[n3%4]; //所能填入的1*1的包
n2-=t2; //将2*2填入后还能填入的2*2的个数


if(n2>0) //如果n2大于0,则在补充包
{
sum+=n2/9;
if(n2%9) //仍有剩余,继续补充一个
{
++sum;
t1+=36-(n2%9)*4; // 填入2*2后剩余的需用1*1的补充
}
}
else
t1-=n2*4; //如果n2小于0,则需用1*1补充
n1-=t1; //所能填入的1*1的包


if(n1>0) //同n2,添加1*1的包
{
sum+=n1/36;
if(n1%36)//若仍有剩余,再添加一个
++sum;
}
cout<<sum<<endl;
}
return 0;
}

原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256486.html