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;
}
}
感想:对于这种题意简单,情况较多的题,可以采用分情况逐一计算的方法,要仔细考率每种情况,避免不必要的错误。
有几种正方形规格的货物要将它们装入箱子中,箱子的高和货物相同,底面为统一的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
相关文章推荐
- iptables防cc攻击
- [Java] 作业3答疑
- java中static关键字的作用和用法详解
- HDOJ 1056 HangOver(水题)
- HDOJ 1056 HangOver(水题)
- 和平时一样
- 中国摇滚乐发展史
- 使用 Hexo+GitHub 搭建独立博客
- 机器学习实战--fp-growth
- 逻辑斯蒂回归模型与最大熵模型
- 浅谈strtok函数的使用心得
- 眼前再次迷茫
- Vsftpd完全攻略(四)搭建支持SSL加密传输的vftpd
- BZOJ 2462: [BeiJing2011]矩阵模板
- strncmp函数
- AndroidStudio常用的设置及快捷键
- 近期规划
- dos2unix命令
- 关于Servlet中GET和POST方法的总结
- java 中对继承实现类的一次重构