|
原来代码小改一下,棱长1000,运行0.5秒,还加上了排序。
- Sub grf()
- t1 = Timer
- Dim s, i, j, k, v, ar(1 To 65536, 1 To 5), n&
- Application.DisplayAlerts = False
- s = Range("f4").Value
- If s Mod 2 = 1 Then MsgBox "无整数解": Exit Sub
- s = s / 2 'i * j + i * k + j * k=s/2 必须为整数
- '不失一般性,令k>=j>=i (k,j,i分别为长,宽,高)
- For i = 1 To s / 2 - 1 '当j=1,k=1时,i有最大值s/2
- For j = i To s / 2 '当i=1,k=1时,j有最大值s/2
- k = (s - i * j) / (i + j) '根据 i * j + i * k + j * k=s ,求出k
- If k < j Then Exit For '如果k出现负值,退出循环
- If k = Int(k) Then '如果k为正整数
- n = n + 1
- ar(n, 1) = k
- ar(n, 2) = j
- ar(n, 3) = i
- ar(n, 4) = i * j * k
- ar(n, 5) = s * 2
- End If
- Next j
- Next i
- [H:L].ClearContents
- [H1].Resize(1, 5) = Array("长", "宽", "高", "体积", "表面积")
- [H2].Resize(n, 5) = ar
- [H2].Resize(n, 5).Sort key1:=[H2], key2:=[i2], key3:=[j2] '排序
- Application.DisplayAlerts = True
- MsgBox "运行时间" & Timer - t1 & "秒,不重复解共" & n & "组"
- End Sub
复制代码 |
评分
-
查看全部评分
|