poj 1017 http://poj.org/problem?id=1017
原本bug超多的代码
#include<stdio.h> int main() { int a[7]; while(scanf("%d %d %d %d %d %d",&a[1],&a[2],&a[3],&a[4] ,&a[5],&a[6]) &&(a[1]+a[2]+a[3]+a[4]+a[5]+a[6] != 0)) { int s = 0,k = 0, t = 0; /*if(a[2]>=9) { s = a[2]/9; a[2] = a[2] - 9*(a[2]/9); }*/ if(a[5] != 0) { if(a[1] > 11*a[5]) a[1] = a[1] - 11*a[5]; else a[1] = 0; //printf("一:a[1] = %d,a[2] = %d\n",a[1],a[2]); } if(a[4] != 0) { if(a[2] > 5*a[4]) a[2] = a[2] - 5*a[4]; else { if((20*a[4] - 4*a[2]) < a[1]) a[1] = a[1] - (20*a[4] - 4*a[2]); else a[1] = 0; a[2] = 0; } //printf("二:a[1] = %d,a[2] = %d\n",a[1],a[2]); } if(a[3] != 0) { if((a[3] % 4) != 0) { k = 7 - 2 * (a[3] % 4); if(a[2] > k) { a[2] = a[2] - k; t = 36 - 9*(a[3] % 4) - 4*k; if(t < a[1]) a[1] = a[1] - t; else a[1] = 0; } else { if(a[1] > ((36-9*(a[3]%4))-4*a[2])) a[1] = a[1] - ((36-9*(a[3]%4))-4*a[2]); else a[1] = 0; a[2] = 0; } } //printf("三:a[1] = %d,a[2] = %d\n",a[1],a[2]); } if(a[2] != 0) { //a[2] = a[2]%9; a[1] -= 36 - (a[2]%9)*4; } // printf("四:a[1] = %d,a[2] = %d\n",a[1],a[2]); /*for(int i=1;i<7;i++) printf("a[%d] = %d\t",i,a[i]); printf("\n");*/ s = a[6] + a[5] + a[4] +(a[3] + 3)/4 + (a[2]+8)/9 + (a[1] + 35)/36; printf("%d\n",s); } }
http://blog.csdn.net/dongfengkuayue/article/details/6461374
#include <stdio.h> int main() { int N, a, b, c, d, e, f, y, x;//N用来存储需要的箱子数目,y用来存储 2*2 的空位数目 // x 用来存储 1*1 的空位数目。 int u[4] = {0, 5, 3, 1}; //数组u 表示3*3 的产品数目分别是 4的倍数,4 的倍数+1, 4 的倍数+2, 4 的倍数+3 //时,为3*3的产品打开的新箱子中剩余的 2*2的空位的个数 while (1) { scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f); if (a == 0 && b == 0 && c == 0 && d == 0 && e == 0 && f == 0) { break; } N = f + e + d + (c + 3) / 4; //这里有一个小技巧 - (c+3)/4 正好等于 c 除以4向上取整的结果,下同 y = 5 * d + u[c % 4];//每一个4*4的箱子装过后还可以再装5个2*2的箱子 //还有3*3的箱子如果没填满6*6的箱子的话,也可以用来装2*2的箱子 //5*5的箱子则只能装1*1的情况了 if (b > y) { N += (b - y + 8) / 9; //如果要装的2*2的箱子的数目比提供的空间要多, } //那么多的部分要新开一些箱子 x = 36 * N - 36 * f - 25 * e - 16 * d - 9 * c - 4 * b; if (a > x) { N += (a - x + 35) / 36; } printf("%d\n", N); } }