问个问题求和为1000的连续整数怎么用VB求。。。

kudiao119 2012-05-09 05:01:51
如题
...全文
368 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2012-05-11
  • 打赏
  • 举报
回复

电子计算机的计算,常常不是像算术那样求解。

因为它快,所以很多为它设计的算法就是尝试。例如求方根等。

当然,为了快,需要排除不可能的条件。

Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim sum As Integer, result As Integer

result = 1000

For i = 1 To result \ 2 - 1
sum = 0
For j = i To result \ 2
sum = sum + j
If sum > 1000 Then Exit For
If sum = 1000 Then
Debug.Print "自然数 " & i; " 到 " & j & "的和为:" & result
End If
Next j
Next i
Debug.Print "完毕"
End Sub

自然数 28 到 52的和为:1000
自然数 55 到 70的和为:1000
自然数 198 到 202的和为:1000
完毕
东方之珠 2012-05-11
  • 打赏
  • 举报
回复
在首项不确定的情况下这样计算:
Option Explicit

'首项为StartNumber的前n项自然数求和的算法
Function NatureSum(ByVal StartNumber As Long, ByVal n As Long) As Double
NatureSum = (2 * StartNumber + n - 1)
NatureSum = NatureSum * n
NatureSum = NatureSum / 2
End Function


Private Sub Command1_Click()
Dim i As Long, j As Long

For i = 1 To 1000
For j = 1 To 1000
If NatureSum(i, j) = 1000 Then
Debug.Print "首项为" & i & "的自然数共有" & j & "个,和为:" & NatureSum(i, j)
Exit For
End If
DoEvents
Next
Next
End Sub


输出结果为:
首项为28的自然数共有25个,和为:1000
首项为55的自然数共有16个,和为:1000
首项为198的自然数共有5个,和为:1000
首项为1000的自然数共有1个,和为:1000

东方之珠 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
唉……

VB code
Option Explicit

Private Sub Form_Load()
Dim i As Integer, StartI As Integer, SumI As Long
StartI = Val(InputBox("请输入开始数", , "100"))
For i = 0 To 999
SumI = SumI ……
……
[/Quote]
整数是有负数的。如果是连续自然数,是可以的。
等差数列前n项和的公式是:s(n)=(首项+末项)*项数/2
根据你的情况公式是:s(n)=(1+n)*n/2,即首项为1,公差为1的自然数求和为1000的自然数有几个。

Option Explicit

'前n项自然数求和
Function NatureSum(ByVal n As Long) As Long
NatureSum = (1 + n) * n / 2
End Function


Private Sub Command1_Click()
Dim i As Long

i = 1
Do While True
Debug.Print "自然数前" & i; "项的和:" & NatureSum(i)
i = i + 1
If NatureSum(i) > 1000 Then Exit Do
Loop

End Sub


输出结果为:
自然数前1项的和:1
自然数前2项的和:3
自然数前3项的和:6
自然数前4项的和:10
自然数前5项的和:15
自然数前6项的和:21
自然数前7项的和:28
自然数前8项的和:36
自然数前9项的和:45
自然数前10项的和:55
自然数前11项的和:66
自然数前12项的和:78
自然数前13项的和:91
自然数前14项的和:105
自然数前15项的和:120
自然数前16项的和:136
自然数前17项的和:153
自然数前18项的和:171
自然数前19项的和:190
自然数前20项的和:210
自然数前21项的和:231
自然数前22项的和:253
自然数前23项的和:276
自然数前24项的和:300
自然数前25项的和:325
自然数前26项的和:351
自然数前27项的和:378
自然数前28项的和:406
自然数前29项的和:435
自然数前30项的和:465
自然数前31项的和:496
自然数前32项的和:528
自然数前33项的和:561
自然数前34项的和:595
自然数前35项的和:630
自然数前36项的和:666
自然数前37项的和:703
自然数前38项的和:741
自然数前39项的和:780
自然数前40项的和:820
自然数前41项的和:861
自然数前42项的和:903
自然数前43项的和:946
自然数前44项的和:990

cadasd32e 2012-05-09
  • 打赏
  • 举报
回复
两重循环
第一个 for i =1 to 500
第二个 用until >1000
lxq19851204 2012-05-09
  • 打赏
  • 举报
回复
Private kCtr As String

Private Sub Form_Load()
Dim i As Integer
Dim j As Integer
Dim k As Integer
k = 1000
For i = 2 To 500
If k Mod i = 0 And i Mod 2 <> 0 Then
InitialNumber i, k / i
End If
Next

Debug.Print kCtr

End Sub

Private Sub InitialNumber(ByVal iCtr As Integer, ByVal jCtr As Integer)
Dim i As Integer
Dim j As String

For i = 1 To iCtr

If jCtr - (iCtr - 1) / 2 + i - 1 < 0 Then Exit Sub
j = j & "," & (jCtr - (iCtr - 1) / 2 + i - 1)
Next i

kCtr = kCtr & vbCrLf & j

End Sub
  • 打赏
  • 举报
回复
换个思路,欢迎指正。

Private Sub Command1_Click()
Cls
Dim i As Integer, s As String, TotalNum As Integer
TotalNum = Val(InputBox("输入总和", , 1000))
For i = 1 To TotalNum / 2
If TotalNum Mod i = 0 Then '个数为奇数
If i Mod 2 = 1 Then
s = TotalNum / i - (i - 1) / 2 & "到" & TotalNum / i + (i - 1) / 2
If TotalNum / i - (i - 1) / 2 > 0 Then Print s
End If
ElseIf TotalNum Mod i = i * 0.5 Then '数字个数为整数
s = TotalNum / i - (i - 1) / 2 & "到" & TotalNum / i + (i - 1) / 2
If TotalNum / i - (i - 1) / 2 > 0 Then Print s
End If
Next
End Sub
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
[是我题没给明白么。。。我问的是求和为1000的 所有连续整数 都列出来。。。。。。。。。/Quote]

确实没仔细看题。嘿嘿……
worldy 2012-05-09
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim n As Long, m1 As Long, m2 As Long
Dim k As Long, k1 As Double
Dim s As String, s1 As String
Dim j As Long

For n = 1 To 500
k = 2 * n - 1
k = k * k + 8000
k1 = Sqr(k)
If k1 = Int(k1) Then
m1 = (-(2 * n - 1) + k1) / 2
If m1 > 0 Then
If Int(m1) = m1 Then
's = s & CStr(n) & " " & CStr(m1) & vbCrLf
s1 = ""
For j = 0 To m1 - 1
If s1 = "" Then
s1 = CStr(n)
Else
s1 = s1 & "+" & CStr(n + j)
End If
Next
s = s & s1 & vbCrLf
End If
End If
m2 = (-(2 * n - 1) - k1) / 2

If m2 > 0 Then
If Int(m2) = m2 Then
' s = s & CStr(n) & " " & CStr(m2) & vbCrLf
s1 = ""
For j = 0 To m2 - 1
If s1 = "" Then
s1 = CStr(n)
Else
s1 = s1 & "+" & CStr(n + j)
End If
Next
s = s & s1 & vbCrLf
End If
End If
End If

Next

MsgBox s
End Sub
kudiao119 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
唉……

VB code
Option Explicit

Private Sub Form_Load()
Dim i As Integer, StartI As Integer, SumI As Long
StartI = Val(InputBox("请输入开始数", , "100"))
For i = 0 To 999
SumI = SumI ……
[/Quote]
是我题没给明白么。。。我问的是求和为1000的 所有连续整数 都列出来。。。。。。。。。
  • 打赏
  • 举报
回复

唉……
Option Explicit

Private Sub Form_Load()
Dim i As Integer, StartI As Integer, SumI As Long
StartI = Val(InputBox("请输入开始数", , "100"))
For i = 0 To 999
SumI = SumI + StartI + i
Next
Me.Caption = SumI
End Sub
kudiao119 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
for……next循环即可啊……
[/Quote]
几个循环请说明白 我要求的是连续整数
  • 打赏
  • 举报
回复
for……next循环即可啊……

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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