<img src="https://img-blog.csdn.net/20150207203825140?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGhlb3JpZ2luYWxkcmVhbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<pre name="code" class="cpp">/*
思想:1、统一化(体现在:能用2填补的地方就先用2填补,最终若a[2]变成了负数再处理)
2、简化( 体现在:在原来数组,即/数组a上处理,已经装进箱子的相应a[i]就减一
技巧:1、断多个数中有1个0,乘积为0;判断多个数都是0,和为0
2、有多个特殊的情况(如:不同余数对应不同的情况)可用数组来存储数值
*/
#include<iostream>
using namespace std;
int a[7];
int rest1[]={0,5,3,1};
int rest2[]={0,7,6,5};
int main()
{
while(true)
{
int sum=0;
for(int i=1;i<=6;i++)
{
cin>>a[i];
sum=sum+a[i];//技巧1
}
if(sum==0) break;
/*else
{
}*///此处已经break,就不用再写else
int ans=0;
//6*6
ans+=a[6];
a[6]=0;
//5*5
ans+=a[5];
a[1]-=a[5]*11;
a[5]=0;
//4*4
ans+=a[4];
a[2]-=a[4]*5;
a[4]=0;
//3*3
if(a[3]%4==0) ans+=a[3]/4;
else ans=ans+a[3]/4+1;
a[2]-=rest1[a[3]%4];
a[1]-=rest2[a[3]%4];
//处理2,1
if(a[2]<0)
{
a[1]+=a[2]*4;
a[2]=0;
}
if(a[1]<0) a[1]=0;
ans+=(a[1]+4*a[2])/36;
if((a[1]+4*a[2])%36!=0)
ans++;
cout<<ans<<endl;
}
}