这个题算比较简单的模拟吧,要求计算把6种规格的箱子进行装箱所需要的最少的箱子数
分别先弄清楚每种箱子放到最大箱子里面的情况,以及剩余部分还可以放多少其他箱子,然后一写应该就OK了
代码:
#include<cstdio>
#include<cstring>
#define MAX 7
int cnt[MAX];
int change(int index,int res)
{
if(cnt[index]>=res)
{
cnt[index]-=res;
return 0;
}
res-=cnt[index];
cnt[index]=0;
return res;
}
int main()
{
while(scanf("%d",&cnt[1])!=EOF)
{
int sum=cnt[1];
for(int i=2;i<MAX;i++)
{
scanf("%d",&cnt[i]);
sum+=cnt[i];
}
if(!sum)
break;
int ans=cnt[6];
if(cnt[5])
{
ans+=cnt[5];
int res=cnt[5]*11;
change(1,res);
}
if(cnt[4])
{
ans+=cnt[4];
int res=cnt[4]*5;
res=change(2,res);
res*=4;
if(cnt[1])
change(1,res);
}
if(cnt[3])
{
ans+=cnt[3]/4;
if(cnt[3]%4)
ans++;
int res=4-cnt[3]%4;
if(res==3)
{
res=5;
res=change(2,res);
res=res*4+7;
if(cnt[1])
change(1,res);
}
else if(res==2)
{
res=3;
res=change(2,res);
res=res*4+6;
if(cnt[1])
change(1,res);
}
else if(res==1)
{
res=1;
change(2,res);
res=res*4+4;
if(cnt[1])
change(1,res);
}
}
if(cnt[2])
{
ans+=cnt[2]/9;
if(cnt[2]%9)
ans++;
int res=(9-cnt[2]%9)*4;
change(1,res);
}
if(cnt[1])
{
ans+=cnt[1]/36;
if(cnt[1])
ans++;
}
printf("%d\n",ans);
}
return 0;
}