计算问题 高手帮忙

lijianqiang 2012-03-09 03:01:45
有如下情况 车辆过磅要求毛重大于55吨自动分多条记录保存 净重不重复 且每条记录 净重+皮重不能大于 55吨
数据如下 皮重26.67 净重 71.6 那么应该保存3条记录
26.68 22.67 反算毛重 26.68 + 22.67 = 49.35
26.68 24.92
26.68 24.01

重量如下 皮重 21.66 净重 64.87 那么应该分2条记录保存
21.66 32.73
21.66 32.14



算法如何实现 要求生成 净重+皮重不能大于 55吨 且数据不重复
...全文
88 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijianqiang 2012-03-09
  • 打赏
  • 举报
回复
这样就有了浮动的空间 上下浮动 0.02--0.05 也不超重
lijianqiang 2012-03-09
  • 打赏
  • 举报
回复
// j 是净重 p是皮重 jlts是记录条数 遇到临界值就多分一条 我的比例是10%
jlts = (int)Math.Ceiling(j / (55 - p));
if ((jlts - j / (55 - p) < 0.1))
{
jlts = jlts + 1;
}
lijianqiang 2012-03-09
  • 打赏
  • 举报
回复
那我给你个数 你算一下 皮重21 吨 净重67吨 这个按公式算是2车
可一上下浮动就超 比如 67/3 =33.5 这个是平均值

21 + 33.5 * 0.03 浮动数 那就超 55了 按说 遇到临界值 必须多加1条记录
gxingmin 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lijianqiang 的回复:]
那不就太假了 一看就看出来了
[/Quote]

那你把那个浮动数再随机一下吗
gxingmin 2012-03-09
  • 打赏
  • 举报
回复
x = (int)Math.Ceiling((55-m)/n);
float avg= n/x;

for(int i=0;i<x;i++) //插入x条 m, n/x的记录
{
//插入记录数据为 m n/x + 0.01*(i-x)/2 //0.01*(i-x)/2是各个记录浮动数
}
lijianqiang 2012-03-09
  • 打赏
  • 举报
回复
那不就太假了 一看就看出来了
gxingmin 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lijianqiang 的回复:]
我会计算应该拆分多少条记录 可是 每条记录的 净重 如何保证 大小且不重复
[/Quote]

数据不重复还不好弄啊,你既然拆分出几条记录了,那么在记录数前半部分减去一点数据,在后半部加上一点数据不就可以了吗,保证不重复,且总数相当

比方说你拆分出来奇数条(比如5条)记录,那么第一条净重平均数减0.2,第二条净重平均数减0.1,第三条净重平均数,第四条净重平均数加0.1,第五条净重平均数加0.2

比方说你拆分出来偶数条(比如6条)记录
,那么第一条净重平均数减0.3,第二条净重平均数减0.2,第三条净重平均数减0.1,第四条净重平均数加0.1,第五条净重平均数加0.2,,第五条净重平均数加0.6


youngBoy 2012-03-09
  • 打赏
  • 举报
回复
我觉得问题不够明确啊。 你要多条保存是怎么保存? 超过55吨,分三个重量保存?(皮重、净重、毛重)
dingxiang506 2012-03-09
  • 打赏
  • 举报
回复
那你就应该每一条记录的时候,记下他,然后与下一条记录的净重进行比较。如果相等就换一个净重,如果不等则继续。因此应该用到循环
lijianqiang 2012-03-09
  • 打赏
  • 举报
回复
当然 拆分后的 净重+ 毛重 越接近55约合理 如果拆分成5条 显然不合理 因为在合理的范围内厂家肯定多装货物
dingxiang506 2012-03-09
  • 打赏
  • 举报
回复
可是你那个分几次才算合理?有没有个标准?譬如第一个71.6 为什么要分成3个记录
lijianqiang 2012-03-09
  • 打赏
  • 举报
回复
我会计算应该拆分多少条记录 可是 每条记录的 净重 如何保证 大小且不重复
gxingmin 2012-03-09
  • 打赏
  • 举报
回复
假设毛重为m,净重为n
if(m+n<=55)
{
//保存一条记录
//数据为 m n
}
else
{
int x; //保存x条记录
//由公式 m + n/x<=55 推导出 x>=(55-m)/n
//从而得到最小的x值,x就是拆分的记录数
// 每条记录是 m, n/x
x = (int)Math.Ceiling((55-m)/n);
for(int i=0;i<x;i++) //插入x条 m, n/x的记录
{
//插入记录数据为 m n/x
}
}
lijianqiang 2012-03-09
  • 打赏
  • 举报
回复
是随意分配 和 差别不能过大
gxingmin 2012-03-09
  • 打赏
  • 举报
回复
假设毛重为m,净重为n
if(m+n<=55)
{
//保存一条记录
// m n
}
else
{
int x; //保存x条记录
由公式 m + n/x<=55 推导出 x>=(55-m)/n
从而得到最小的x值,x就是拆分的记录数
每条记录数是 m, n/x

}
dingxiang506 2012-03-09
  • 打赏
  • 举报
回复
26.68 22.67 反算毛重 26.68 + 22.67 = 49.35
26.68 24.92
26.68 24.01

这个净重是任意分配不,只要净重+皮重不大于55就行????
sinitek123 2012-03-09
  • 打赏
  • 举报
回复
公式 看你写的表示鸭梨很大

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧