设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 18195|回复: 35
打印 上一主题 下一主题

编程题目

[复制链接]
跳转到指定楼层
1#
发表于 2005-9-20 18:42:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目为:将1-9这9个数字分成三个3位数,要求分出的第一个3位数,正好是第二个三位数的

二分之一,是第三个3位数的三分之一。



游客,如果您要查看本帖隐藏内容请回复
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-9-21 04:49:00 | 只看该作者
trynew之作,相必精彩,学习学习
3#
发表于 2005-9-21 18:34:00 | 只看该作者
佩服佩服

[此贴子已经被作者于2005-9-21 14:18:16编辑过]

4#
发表于 2005-9-22 16:25:00 | 只看该作者
看看
5#
发表于 2005-9-22 16:32:00 | 只看该作者
不错,排除输出时候后,纯运算时间3.9毫秒:

Public Sub Ck()

Dim i As Integer, j As Integer, k As Integer

Dim t1 As Double, t2 As Double, w As String

t1 = Timer

For k = 1 To 100

For i = 123 To 333

    For j = 1 To 9

        If InStr(1, i & 2 * i & 3 * i, j) = 0 Then Exit For

    Next j

    If j > 9 Then w = i & " " & 2 * i & " " & 3 * i

Next i

Next k

t2 = Timer

Debug.Print (t2 - t1) / 100

End Sub



[此贴子已经被作者于2005-9-22 9:29:46编辑过]

6#
发表于 2005-9-22 17:25:00 | 只看该作者
字符串操作是性能杀手,代码中尽量避免了使用字符串操作。

运行时间:0.98毫秒

Public Sub Test()

    Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, num As Long

    Dim t1 As Double, t2 As Double

    Dim data() As Byte

    Dim tags(8) As Boolean

    Dim w As String

    t1 = Timer

   

    For m = 1 To 1000

    For i = 1 To 3

        For j = 1 To 9

            If j <> i Then

            For k = 1 To 9

                If k <> i And k <> j Then

                    num = i * 100 + j * 10 + k

                    If num > 329 Then GoTo NOT_THIS

                    data = CStr(num * 1000000 + num * 2000 + num * 3)

                    Erase tags

                    

                    For l = 0 To UBound(data) Step 2

                        If data(l) = 48 Then GoTo NOT_THIS

                        If tags(data(l) - 49) Then GoTo NOT_THIS

                        tags(data(l) - 49) = True

                    Next l

                    

                    w = num & " " & num * 2 & " " & num * 3

                End If

NOT_THIS:

            Next k

            End If

        Next j

    Next i

    Next m

   

    t2 = Timer

   

    Debug.Print (t2 - t1) ; "毫秒"

End Sub

[此贴子已经被作者于2005-9-22 9:53:06编辑过]

7#
发表于 2005-9-22 18:44:00 | 只看该作者
领教了各位高手!!
8#
 楼主| 发表于 2005-9-22 23:50:00 | 只看该作者
运行时间:0.298毫秒Public Sub Test4()

    Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, Num As Long

    Dim t1 As Double, t2 As Double

    Dim data() As Byte

    Dim tags(9) As Boolean

    Dim w As String    t1 = Timer

   

    For m = 1 To 1000

    For i = 1 To 3

        For j = 1 To 9

            If j <> i Then

            For k = 1 To 9

                If k <> i And k <> j Then

                    Num = i * 100 + j * 10 + k

                    If Num > 329 Then Exit For

                    'num = (num * 1000000 + num * 2000 + num * 3)                    Erase tags

                    

                    'For l = 0 To UBound(data) Step 2

                    '    If data(l) = 48 Then GoTo NOT_THIS

                    '    If tags(data(l) - 49) Then GoTo NOT_THIS

                    '    tags(data(l) - 49) = True

                    'Next l

                    tags(Num \ 100) = True

                    tags((Num Mod 100) \ 10) = True

                    tags(Num Mod 10) = True

                    tags((Num * 2) \ 100) = True

                    tags(((Num * 2) Mod 100) \ 10) = True

                    tags((Num * 2) Mod 10) = True

                    tags((Num * 3) \ 100) = True

                    tags(((Num * 3) Mod 100) \ 10) = True

                    tags((Num * 3) Mod 10) = True

                    

                    If tags(1) And tags(2) And tags(3) And tags(4) And tags(5) And tags(6) And tags(7) And tags(8) And tags(9) Then

                    

                    w = Num & " " & Num * 2 & " " & Num * 3

                    'Debug.Print w

                    End If

                End If

'NOT_THIS:

            Next k

            End If

        Next j

    Next i

    Next m

   

    t2 = Timer

   

    Debug.Print (t2 - t1); "毫秒"

End Sub

9#
发表于 2005-9-23 19:57:00 | 只看该作者
这个强的,甘拜下风了!

对了,Trynew最近怎么不上QQ,我找了你好几次没找到。上次你对EDF提出的建议我都已经作了改进,现在已经完全支持事件参数了,找不到你,我先发论坛了。

[此贴子已经被作者于2005-9-23 14:36:12编辑过]

10#
发表于 2005-9-24 22:03:00 | 只看该作者
手痒了,再来一段:0.219毫秒

Public Sub Test5()

    Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer

    Dim Num As Integer, Num2 As Integer, Num3 As Integer

    Dim t1 As Double, t2 As Double

    Dim data() As Byte

    Dim tag As Long

    Dim tags(9) As Long

    Dim w As String

   

    t1 = Timer

   

    For i = 0 To 9

        tags(i) = 2 ^ i

    Next i

    For m = 1 To 10000

    For i = 1 To 3

        For j = 1 To 9

            If j <> i Then

            For k = 1 To 9

                If k <> i And k <> j Then

                    Num = i * 100 + j * 10 + k

                    If Num > 329 Then Exit For

                    

                    Num2 = Num + Num

                    Num3 = Num + Num2

                    tag = 0

                    tag = tag Or tags(i)

                    tag = tag Or tags(j)

                    tag = tag Or tags(k)

                    tag = tag Or tags((Num2) \ 100)

                    tag = tag Or tags(((Num2) Mod 100) \ 10)

                    tag = tag Or tags((Num2) Mod 10)

                    tag = tag Or tags((Num3) \ 100)

                    tag = tag Or tags(((Num3) Mod 100) \ 10)

                    tag = tag Or tags((Num3) Mod 10)

                    If tag = &H3FE Then

                        w = Num & " " & Num * 2 & " " & Num * 3

                        'Debug.Print w

                    End If

                End If

            Next k

            End If

        Next j

    Next i

    Next m

   

    t2 = Timer

   

    Debug.Print (t2 - t1) / 10; "毫秒"

End Sub

[此贴子已经被作者于2005-9-24 14:26:09编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-25 14:48 , Processed in 0.093648 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表