您的位置:首页 > 其它

poj 1017 Packets

2014-07-16 14:04 288 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: