求一个VB算法。 100

随机生成5~20个数。每个数的范围随机为1~100求:若干个数之和,最接近500的是哪几个?算法怎么写啊?... 随机生成5~20个数。每个数的范围随机为1~100
求:若干个数之和,最接近500的是哪几个?
算法怎么写啊?
展开
 我来答
数学与计算机编程
2019-06-22 · TA获得超过2159个赞
知道大有可为答主
回答量:2312
采纳率:80%
帮助的人:557万
展开全部

代码:

Private Sub Command1_Click()

Cls

Randomize

Dim Sum(5 To 20) As Integer, AbsoluteDeviation(5 To 20) As Integer, OriginalIndex(5 To 20) As Integer

Dim Rank(1 To 16) As Integer

For i = LBound(Sum) To UBound(Sum)

For j = 1 To i

Sum(i) = Sum(i) + Int(Rnd * 100 + 1)

AbsoluteDeviation(i) = Abs(Sum(i) - 500)

Next j

OriginalIndex(i) = i

Print "Sum(" & Format(i, "00") & ")=" & Format(Sum(i), "@@@@"), Format(AbsoluteDeviation(i), "@@@@")

Next i

AbsoluteDeviationSort Sum, AbsoluteDeviation, OriginalIndex, Rank

Print

For i = LBound(AbsoluteDeviation) To UBound(AbsoluteDeviation)

Print "Sum(" & Format(OriginalIndex(i), "00") & ")=" & Format(Sum(i), "@@@@"), Format(AbsoluteDeviation(i), "@@@@") & Space(3) & Format(Rank(i - 4), "@@")

Next i

End Sub

Public Sub AbsoluteDeviationSort(s() As Integer, a() As Integer, o() As Integer, r() As Integer)

Dim b As Integer

For i = LBound(a) To UBound(a) - 1

For j = i + 1 To UBound(a)

If a(j) < a(i) Then

t = a(i)

a(i) = a(j)

a(j) = t

t = s(i)

s(i) = s(j)

s(j) = t

t = o(i)

o(i) = o(j)

o(j) = t

End If

Next j

Next i

r(1) = 1

For i = LBound(r) + 1 To UBound(r)

If a(i + 4) = a(i + 3) Then

r(i) = r(i - 1)

Else

r(i) = i

End If

Next i

End Sub

运行界面:

追问
你答案偏题了,不对。
tianqing20wen

2019-06-22 · TA获得超过2.4万个赞
知道大有可为答主
回答量:8226
采纳率:88%
帮助的人:5075万
展开全部

将所有随机生成的数 进行全组合 然后枚举每个组合的值与500的差值 你可以存在数组变量中 最后对其排序得出差值最小的组合

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式