未来青年百度云:我用VB编的35选7 共有多少种结果程序一运行就死机

来源:百度文库 编辑:高考问答 时间:2024/05/02 06:19:45
是数太大了 造成的吗???
Dim a, b, c, d, e, f, g, h, i, j, k As Single, s As Double

For i = 1 To 35
For j = 1 To 35
For k = 1 To 35
For a = 1 To 35
For b = 1 To 35
For c = 1 To 35
For d = 1 To 35
If i <> j And j <> k And k <> a And a <> b And b <> c And c <> d Then
s = s + 1
End If

Next
Next
Next
Next

Next
Next
Next

P话真多 我就问为什么执行不出来 数学的谁不会 显的你行怎么

另外是未响应 不是死机...

DoEvents 加在哪里

死循环了么?

doevents

并且实时输出一下 看看状态
有时候不一定是死了

楼主 首先回答你的问题,VB在大循环的时候会消耗很多CPU时间,在XP以上的机器(98完全可能死机)死机的可能性不大,但程序本身已经无法响应了。对于这样的循环应该加入DoEvents,把控制权放回给系统。

另外,请楼主多动动脑子,35选7,这不就是排列组合的内容,楼主学过数学吧。

35选7=35*34*33*32*31*29*28
不用循环也能实现了,何必浪费时间空间呢,虽然乘法消耗时间,但比起你这个循环恐怕是小得可怜了。
sum=1;
for i=35 to 28 step -1
sum=sum*i
next

Private Sub Form_click()
Dim a!, b!, i!, j!, k!, s&
s = 0
t1 = Time
For i = 1 To 35
For j = 1 To 35
For k = 1 To 35
For a = 1 To 35
For b = 1 To 35

If i <> j And j <> k And k <> a And a <> b Then
s = s + 1

End If
Next b
Next a
Next k
Next j
Next i
t2 = Time
Print s
Print
Print "共花去"; DateDiff("s", t1, t2); "秒"
End Sub
你运行这个看看,等个十几二十秒就出结果了,看看花了多少时间?再加2个数,那可不是乘2那么简单啊,CPU不够强的话就等个五分钟左右(估计)吧。

死机应该不会,但是这个程序比较小,循环执行得比较快,CPU往往会消耗的比较厉害(但这之间似乎没有必然联系),这样系统无暇响应其它的请求。估计这种情况也可能与操作系统的任务调度机制的关系。