按键精灵 开发者认证 5级 问答 ,求高手(有一根长度600cm的钢筋,需要截成长度分别为69cm、39cm、...)

有一根长度600cm的钢筋,需要截成长度分别为69cm、39cm、29cm三种规格的短料,在三种规格的短料至少各截1截的前提下,如何截取才能使剩余材料最少?请写出代码。... 有一根长度600cm的钢筋,需要截成长度分别为69cm、39cm、29cm三种规格的短料,在三种规格的短料至少各截1截的前提下,如何截取才能使剩余材料最少?请写出代码。 展开
 我来答
帐号已注销
推荐于2016-12-01 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6449
采纳率:69%
帮助的人:2160万
展开全部
//用穷举法,把所有的结果都算出了,然后取最小的哪组结果即可。
//先求出所有剩余的结果,用数组表示
Dim n,r //n是剩余量的值,临时变量,r是计算结果
i = 0 : j = 0 : k = 0 : m = 0
//上面i,j,k分别是69cm,39cm,29cm的段数,很容易知道i<8,j<15,k<20,m是剩余量数组下标
For i = 0 To 8
For j = 0 To 15
For k = 1 To 20
n = 600 - 69 * i - 39 * j - 29 * k
If n >= 0 Then
Redim Preserve a(m), b(m)
a(m) = n
b(m) = i & "," & j & "," & k
m = m + 1
End If
Next
Next
Next
//下面找出最小剩余量
n = 600 //剩余量不可能比600大
For i = 0 To m - 1
If n > a(i) Then
n = a(i)
r = b(i)
End If
Next
//经过上面代码,可知道r的值是0,2,18,可以用 MessageBox r 查看
//也就是当i=0,j=2,k=18,剩余量最小,此时,n=0,上面的n是剩余量。
//当然,代码只能选出一组结果,如果想选出所有结果,加上下面代码:
rn = 0
For i = 0 To m - 1
If n = a(i) Then
Redim Preserve c(rn)
n = a(i)
c(rn) = b(i)
rn = rn + 1
End If
Next
//下面查看结果
For i = 0 To rn - 1
MessageBox c(i)
Next
//这个穷举法效率低,如果想高效,要有更好的算法,此题i,j,k是有制约的,所以肯定有更好的算法,不过本人水平有限,更好算法暂时想不出。
玩玩而已瞬
2015-09-03 · TA获得超过1801个赞
知道小有建树答主
回答量:1089
采纳率:87%
帮助的人:415万
展开全部
69X6+39X4+29=599
代码不知道,不过上面是截取的次数,这是数学题吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式