linux以循环来计算等差数列,[求助]等差数列快速计算,谁能助我,渡出难关

多谢Long_III,最近用字典较少,主要是认为DICTIONARY作为一种对象,与数组相比,还是要慢些。我的代码中调用COUNTIF函数也很不明智。

突然想起用一个byte数组标记可能要快些,试试:

Private Sub CommandButton2_Click()    '

Application.ScreenUpdating = False

Dim r As Range, diff As Long, n As Byte, i As Byte, j As Byte, k As Long, cc As Long, nums As Long, befit As Boolean, result() As String

Dim b() As Byte, aa

aa = Timer

Rows("20:65536").Delete

ReDim b(1 To 2 * [dj1])

Set r = [a1:dj1]

For j = 1 To [dj1].Column

b((r(1, j))) = 1

Next

For n = 3 To 20    '循环?等差

cc = n * (n + 3) / 2 - 9

diff = (Val(r(1, r.Cells.Count)) - Val(r(1, 1))) / (n - 1)    '最大可能差额

nums = 1    '初始化计数变量

ReDim result(1 To n + 1, 1 To nums)    '初始化数组

For i = 4 To diff  '循环差额

For j = 1 To r.Cells.Count - n    '循环整个范围

befit = True

For k = 0 To n - 1

If b(r(1, j) + k * i) = 0 Then befit = False: Exit For

Next

If befit = True Then

If b(r(1, j) + (n + 1) * i) = 0 Then

nums = nums + 1

ReDim Preserve result(1 To n + 1, 1 To nums)

For k = 0 To n    '添一行n等差数列

result(k + 1, nums) = r(1, j) + k * i

Next

End If

End If

Next

Next

If nums > 1 Then

result(1, 1) = WorksheetFunction.Text(n, "[dbnum1]") & "等差序列"    '列头

[a20].Offset(, cc).Resize(nums, n + 1) = WorksheetFunction.Transpose(result)    '定位赋值

[a20].Offset(1, cc).Resize(nums, n).Font.Color = vbRed    '前面的列设成红色字体

[a20].Offset(1, n + cc).Resize(nums, 1).Font.Color = vbBlue    '最后一列设成蓝色字体

End If

Next

Application.ScreenUpdating = True

MsgBox "ok! timer:= " & Format(Timer - aa, "0.00")

End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值