您的位置:首页 > 其它

1017 货物装箱子问题

2016-03-28 21:19 260 查看
简单题意;

      有几种正方形规格的货物要将它们装入箱子中,箱子的高和货物相同,底面为统一的6*6,问使用最少个数的箱子。

思路的形成:

      从最大型号的货物开始,分情况逐一计算,不足的空间用小的货物补齐。最后将所使用的货物箱统一起来即可。

代码如下;

#include<iostream>
using namespace std;
int main()
{

int a[10],i,k;
while(cin>>a[1])
{
int sum=0;
for(i=2;i<=6;i++)
cin>>a[i];
for(i=1;i<=6;i++)
if(a[i]==0)
sum++;
if(sum==6)
break;//判断是否到了结束的条件
int num;
num=a[6];
if(a[5]>0)
{
num+=a[5];
if(a[5]*11>=a[1])
a[1]=0;
else
a[1]=a[1]-a[5]*11;
}
if(a[4]>0)
{
int k;
num+=a[4];
if(a[4]*5>=a[2])
{
k=36*a[4]-a[4]*16-a[2]*4;
a[2]=0;
if(a[1]>0)
{
if(k>=a[1])
a[1]=0;
else
a[1]=a[1]-k;
}
}
else
a[2]=a[2]-a[4]*5;
}
if(a[3]>0)//对于此种情况比较复杂,要注意将所有的情况写对
{
num+=a[3]/4;
a[3]%=4;
if(a[3]!=0)
{
num++;
k=36-a[3]*9;
if(a[3]==3)
{
if(a[2]!=0)
{
a[2]--;
if(a[1]>5)
a[1]-=5;
else
a[1]=0;
}
else
{
if(a[1]>9)
a[1]-=9;
else
a[1]=0;
}
}
if(a[3]==2)
{
if(a[2]>3)
{
a[2]-=3;
if(a[1]>6)
a[1]-=6;
else
a[1]=0;
}
else
{
k=18-a[2]*4;
a[2]=0;
if(a[1]>k)
a[1]-=k;
else
a[1]=0;
}
}
if(a[3]==1)
{
if(a[2]>5)
{
a[2]-=5;
if(a[1]>7)
a[1]-=7;
else
a[1]=0;
}
else
{
k=36-9-a[2]*4;
a[2]=0;
if(a[1]>k)
a[1]-=k;
else
a[1]=0;
}
}
}
}
if(a[2]>0)
{
num+=a[2]/9;
a[2]%=9;

4000
if(a[2]!=0)
{
num++;
k=36-a[2]*4;
if(k>=a[1])
a[1]=0;
else
a[1]=a[1]-k;
}
}
if(a[1]>0)
{
num+=a[1]/36;
a[1]%=36;
if(a[1]!=0)
num++;
}
cout<<num<<endl;
}
}

感想:对于这种题意简单,情况较多的题,可以采用分情况逐一计算的方法,要仔细考率每种情况,避免不必要的错误。
ACID:00736240



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: