货车内宽是2.4米。考虑到最多装载,长宽130×100的货品,应该横竖摆放。
横竖摆放的数量如何自动计算呢?
采用数学公式,计算如下:
横向摆放数=(int)(横长+竖高)*数量/4/横长
竖向摆放数=数量-横向摆放数
结果如下:
横长 | 130 | 160 | |||
竖宽 | 100 | 80 | |||
公式 | 横向摆放数=(int)(横长+竖高)*数量/4/横长 | ||||
数量 | 横向摆放 | 竖向摆放 | 横向摆放 | 竖向摆放 | |
1 | 0.442308 | 1 | 0.375 | 1 | |
2 | 0.884615 | 2 | 0.75 | 2 | |
3 | 1.326923 | 2 | 1.125 | 2 | |
4 | 1.769231 | 3 | 1.5 | 3 | |
5 | 2.211538 | 3 | 1.875 | 4 | |
6 | 2.653846 | 4 | 2.25 | 4 | |
7 | 3.096154 | 4 | 2.625 | 5 | |
8 | 3.538462 | 5 | 3 | 5 | |
9 | 3.980769 | 6 | 3.375 | 6 | |
10 | 4.423077 | 6 | 3.75 | 7 | |
11 | 4.865385 | 7 | 4.125 | 7 | |
12 | 5.307692 | 7 | 4.5 | 8 | |
13 | 5.75 | 8 | 4.875 | 9 | |
14 | 6.192308 | 8 | 5.25 | 9 | |
15 | 6.634615 | 9 | 5.625 | 10 | |
16 | 7.076923 | 9 | 6 | 10 | |
17 | 7.519231 | 10 | 6.375 | 11 | |
18 | 7.961538 | 11 | 6.75 | 12 | |
19 | 8.403846 | 11 | 7.125 | 12 | |
20 | 8.846154 | 12 | 7.5 | 13 |
非常不理想!!
困惑三天,想的解决方法如下(计算两行货物长度最小值):
struct HangGeshu
{
public int hang1ge, hang2ge;
}
private HangGeshu getHengshuShuliang(int heng,int shu,int shuliang,Boolean youxianheng)
{
HangGeshu hangGeshu = new HangGeshu();
if (shuliang > 1)
{
hangGeshu.hang1ge = shuliang / 2;
if (youxianheng)
{
hangGeshu.hang1ge++;
}
else
{
hangGeshu.hang1ge--;
}
hangGeshu.hang2ge = shuliang - hangGeshu.hang1ge;
//货物横竖摆放,目标长度差值最小 (1 横放 2 竖放)
int cha0 = Math.Abs(hangGeshu.hang1ge * heng - hangGeshu.hang2ge * shu);
int chaold = cha0;
Boolean key = true;
while (key)
{
cha0 = Math.Abs((hangGeshu.hang1ge-1) * heng - (hangGeshu.hang2ge+1) * shu);
if (cha0 < chaold)
{
chaold = cha0;
hangGeshu.hang1ge--;
hangGeshu.hang2ge++;
}
else
{
key = false;
}
}
key = true;
while (key)
{
cha0 = Math.Abs((hangGeshu.hang1ge + 1) * heng - (hangGeshu.hang2ge - 1) * shu);
if (cha0 < chaold)
{
chaold = cha0;
hangGeshu.hang1ge++;
hangGeshu.hang2ge--;
}
else
{
key = false;
}
}
}
else
{
if (youxianheng)
{
hangGeshu.hang1ge = 1;
hangGeshu.hang2ge = 0;
}
else
{
hangGeshu.hang1ge = 0;
hangGeshu.hang2ge = 1;
}
}
return hangGeshu;
}