这个题的大意就是:有六个型号的产品分别为1*1,,2*2,3*3,4*4,5*5,6*6的,用6*6的箱子装这些产品,问最少用几个箱子能把这些产品装完。
对于6*6,5*5,4*4,3*3的产品,有几个这样的产品就要用几个箱子。6*6的产品装在箱子里没有剩余空间;5*5的产品装在箱子里,剩余的空间还可以装11个1*1的产品;4*4的产品装在箱子里,剩余的空间还可以装5个2*2的产品;而3*3的产品装在箱子里剩余空间的情况比较复杂(第一种:3*3产品个数%4余1,那么剩余空间可以装5个2*2和7个1*1的产品;第二种:3*3产品个数%4余2,那么剩余空间可以装3个2*2和6个1*1的产品;第三种:3*3产品个数%4余3,那么剩余空间可以装1个2*2和5个1*1的产品。);那么剩下的空间就有2*2和1*1的产品来填补。
<pre class="cpp" name="code">#include <iostream>
#include <stdio.h>
using namespace std;
int three[4][2]= {{0,0},{5,7},{3,6},{1,5}}; //3*3产品装在箱子里剩余空间的情况;
int main()
{
int box[7];
int sum,cc,i;
while(1)
{
sum=0;
for(i=1; i<=6; i++)
{
scanf("%d",&box[i]);
sum+=box[i];
}
if(sum==0)
break;
cc=(box[3]+3)/4+box[4]+box[5]+box[6];
int count_2,count_1;
count_2=three[box[3]%4][0]+5*box[4]; //剩余空间能装下2*2产品的个数
count_1=three[box[3]%4][1]+11*box[5]; //剩余空间能装下1*1产品的个数
if(count_2>=box[2])
{
count_1+=4*(count_2-box[2]);
}
else
{
cc+=((box[2]-count_2)+8)/9;
count_1+=(9-(box[2]-count_2)%9)*4;
}
if(count_1<box[1])
{
cc+=((box[1]-count_1)+35)/36;
}
printf("%d\n",cc);
}
return 0;
}