这道题可以说是模拟,也可以说是数学题;
以前在codeforce做过一题类似的,但是写的好长好长,后来看了大神写的代码后被折服...
1 #include<stdio.h> 2 int main(){ 3 int n,a,b,c,d,e,f,x,y; 4 int u[4]={0,5,3,1}; 5 while(1){ 6 scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f); 7 if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0) 8 break; 9 n=d+e+f+(c+3)/4; //大块物体需要的箱子数目; 10 y=5*d+u[c%4]; //所用箱子中剩余2*2的空格的数目 11 if(b>y) 12 n+=(b-y+8)/9;//计算用来装2*2物体的数目 13 x=36*n-36*f-25*e-16*d-9*c-4*b;//计算所有箱子中1*1空格的数目 14 if(a>x) 15 n+=(a-x+35)/36;//计算单独装1*1物体的数目 16 printf("%d ",n); 17 } 18 return 0; 19 }