第1个回答 2011-09-23
其中产生随机数是重点,要用到函数a(i) = Int(f * Rnd()) + 1
代码:
Private Sub Command1_Click()
Dim Application As Object
Dim WorkBook As Object
Dim Sheet As Object
Set Application = CreateObject("Excel.Application") '建立EXCEL对象
Set WorkBook = Application.Workbooks.Add() '建立一个新的Excel文档
Set Sheet = WorkBook.Sheets.Add() '建立一个新表单
Application.Visible = True 'EXCEL使之可见
Cls
x = 5050
y = 29700
k = 100
Dim a(100) As Integer
Do While i < 99
xishu = 100 - i
x = x - xishu
f = Int((y - x) / xishu)
a(i) = Int(f * Rnd()) + 1
y = y - xishu * a(i)
jieguo = jieguo + xishu * a(i)
p = jieguo + y
shuzi = shuzi + a(i)
'Print a(i); xishu; a(i) * xishu; y; jieguo; p; shuzi
g = Int(i / 10) + 1
f = i - (g - 1) * 10 + 1
Sheet.Cells(g, f).Value = shuzi '填写表单的第g行第f列的值
i = i + 1
Loop
Sheet.Cells(10, 10).Value = 29700 - jieguo + shuzi
End Sub
第5个回答 2011-09-23
解题思路:
将这一百个整数按从小到大排列,第一个数为A0,第二个数比第一数大A1,第三个数比第二个数大A2,以此类推,第100个数比第99个数大A99,那么这100个整数之和可表达为:100*A0+99*A1+......+2A98+A99=29700
这100个数不重复,说明A(i)>0,进一步说明99*A1+......+2A98+A99这一部分大于或等于4950,同时说明100*A0<29700-4950,这样就可以确定A0的取值范围,然后在取值范围内取随机数。
通过随机数确定了A0后,用同样的方法就可以确定后面的A1、A2。
程序实现代码:
Private Sub Command1_Click()
Dim Application As Object
Dim WorkBook As Object
Dim Sheet As Object
Set Application = CreateObject("Excel.Application") '建立EXCEL对象
Set WorkBook = Application.Workbooks.Add() '建立一个新的Excel文档
Set Sheet = WorkBook.Sheets.Add() '建立一个新表单
Application.Visible = True 'EXCEL使之可见
Cls
x = 5050
y = 29700
k = 100
Dim a(100) As Integer
Do While i < 99
xishu = 100 - i
x = x - xishu
f = Int((y - x) / xishu)
a(i) = Int(f * Rnd()) + 1
y = y - xishu * a(i)
jieguo = jieguo + xishu * a(i)
p = jieguo + y
shuzi = shuzi + a(i)
'Print a(i); xishu; a(i) * xishu; y; jieguo; p; shuzi
g = Int(i / 10) + 1
f = i - (g - 1) * 10 + 1
Sheet.Cells(g, f).Value = shuzi '填写表单的第g行第f列的值
i = i + 1
Loop
Sheet.Cells(10, 10).Value = 29700 - jieguo + shuzi
End Sub
如有疑问,问我 QQ:105651183本回答被提问者采纳