一个关于循环的问题,算几个数!

bigspook 2004-11-22 03:31:44
假定有6个数字,每个数字从1——33,现在想在TEXT1中给出任意一个数字,算这6个数字相加后值为指定数字的组合情况!写代码如下,但一运行就未响应!请给予指点!
Private Sub Command1_Click()
a = 1
Do Until a = 34
b = 1
Do Until b = 34

If b = a Then
b = b + 1
End If

c = 1
Do Until c = 34

If c = b Then
c = c + 1
End If

If c - 1 = b And b - 1 = a Then
c = c + 1
End If

d = 1
Do Until d = 34

If d = c Then
d = d + 1
End If

e = 1
Do Until e = 34

If e = d Then
e = e + 1
End If

f = 1
Do Until f = 34

If f = e Then
f = f + 1
End If

zhi = a + b + c + d + e + f
If zhi = Int(Text1.Text) Then
List1.AddItem a & " " & b & " " & c & " " & d & " " & e & " " & f
End If
f = f + 1
Loop
e = e + 1
Loop
d = d + 1
Loop
c = c + 1
Loop
b = b + 1
Loop
a = a + 1
Loop

End Sub
...全文
125 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2004-11-22
  • 打赏
  • 举报
回复
就是太长了。你可以这样试一下:

Dim bStop As Boolean

Private Sub Command1_Click()
bStop = False 'Nomally run
a = 1
Do Until a = 34
b = 1
Do Until b = 34

If b = a Then
b = b + 1
End If

c = 1
Do Until c = 34

If c = b Then
c = c + 1
End If

If c - 1 = b And b - 1 = a Then
c = c + 1
End If

d = 1
Do Until d = 34

If d = c Then
d = d + 1
End If

e = 1
Do Until e = 34

If e = d Then
e = e + 1
End If

f = 1
Do Until f = 34

If f = e Then
f = f + 1
End If

zhi = a + b + c + d + e + f
If zhi = Int(Text1.Text) Then
List1.AddItem a & " " & b & " " & c & " " & d & " " & e & " " & f
End If
f = f + 1
'*****************************
List1.Refresh
DoEvents
If bStop Then Goto exitsub
'*****************************
Loop
e = e + 1
Loop
d = d + 1
Loop
c = c + 1
Loop
b = b + 1
Loop
a = a + 1
Loop
exitsub:
End Sub

Private Sub Command2_Click()
bStop = True
End If

应该能中止。
你共有 6 层循环,应该执行 34 的 6 次方。 如果 1 毫秒执行一次公式运算,需要 1544804 秒,就是 17 天零 21 小时。
huangjianyou 2004-11-22
  • 打赏
  • 举报
回复
//哈哈 ,对了 楼主你这6个数 能不能重复啊? 能重复的话答案有很多

能不能重复在where里加条件就行了,一样快。

^_^
huangjianyou 2004-11-22
  • 打赏
  • 举报
回复
用循环绝对可行,但太慢了,你根本不知道进行到那里,除非你在窗体上放一些提示之类的东东就行了,这样你不觉慢,因为你看得见程序里的数字在动。

^_^
行云边 2004-11-22
  • 打赏
  • 举报
回复
哈哈 ,对了 楼主你这6个数 能不能重复啊? 能重复的话答案有很多
bigspook 2004-11-22
  • 打赏
  • 举报
回复
我也准备用你说的特殊方法试试!
只是我真的想知道计算机的运算能力,也想知道这样写是否可行!
huangjianyou 2004-11-22
  • 打赏
  • 举报
回复
晕了,不要说1小时,1分种我都不想等,那个特殊方法1秒钟就出来了,你试试啦。

^_^
bigspook 2004-11-22
  • 打赏
  • 举报
回复
那如果我不管它,让它一直运算下去,能算出来吗?大概需要多长的时间啊?1小时、1天还是2天???
只要它能算出来,时间我可以等!
aiur2000 2004-11-22
  • 打赏
  • 举报
回复
好像福彩双色球什么的啊!做特殊算法吗?33^6累
lxcc 2004-11-22
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
'加个DoEvents
DoEvents
a = 1
huangjianyou 2004-11-22
  • 打赏
  • 举报
回复
太多数计算不是死了,而是循环太多,正在做的时候你觉得死了。以上的方法是一个特殊的方法。

^_^
huangjianyou 2004-11-22
  • 打赏
  • 举报
回复
在一个数据库上建六个表(table1到table6),表里只有一个字段f1,是数字型,填上1到33个数,即一共有33条记录,每个表都一样,然后一句话就出来了:

SELECT a.f1,b.f1,c.f1,d.f1,e.f1,f.f1
FROM table1 as a,table2 as b,table3 as c,table4
as d,table5 as e,table6 as f
WHERE a.f1+b.f1+c.f1+d.f1+e.f1+f.f1 = 200(你指定的数)
AND a.f1>=b.f1 AND b.f1>=c.f1 AND c.f1>=d.f1 AND
d.f1>=e.f1 AND e.f1>=f.f1

'后面加句
ORDER BY a.f1 DESC,b.f1 DESC,c.f1 DESC,d.f1
DESC,e.f1,f,f1 DESC
更好看。

^_^
行云边 2004-11-22
  • 打赏
  • 举报
回复
加 DoEvents 语句
viena 2004-11-22
  • 打赏
  • 举报
回复
肯定有死循环啊
viena 2004-11-22
  • 打赏
  • 举报
回复
按F8单步跟踪一下吧

7,762

社区成员

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

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