设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12345下一页
返回列表 发新帖
查看: 22745|回复: 47
打印 上一主题 下一主题

41期电脑报编程题目

[复制链接]
跳转到指定楼层
1#
发表于 2005-10-20 19:56:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编程题目:

有一个九位数,它由1到9着9个数字组成,每个数字刚好只出现一次。这个九位数的前两位能被2整除,前三位能被3整除。。。。前N位能被N整除(2<=n<=9),整个九位数能被9整除。请编程找出这样的九位数。



游客,如果您要查看本帖隐藏内容请回复
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-10-20 22:23:00 | 只看该作者
SEE
3#
发表于 2005-10-21 02:51:00 | 只看该作者
看看, 答案
4#
发表于 2005-10-21 16:19:00 | 只看该作者
呵呵,trynew对文本操作情有独钟,借鉴思路修改后速度提高十二倍,在0.7毫秒左右

Public Sub mNumTest(Optional Num As Long = 0, Optional N As Integer = 1)

Static ik(1 To 9) As Boolean

Dim i As Integer

For i = 1 To 9

   If Not ik(i) Then

      If (10 * Num + i) Mod N = 0 Then

         ik(i) = True

         If N = 9 Then

            Debug.Print 10 * Num + i

         Else

            mNumTest 10 * Num + i, N + 1

         End If

         ik(i) = False

      End If

   End If

Next

End Sub

[此贴子已经被作者于2005-10-21 8:50:57编辑过]

5#
发表于 2005-10-21 19:03:00 | 只看该作者
电脑比较慢,Cerelon 1.2G环境,1.422毫秒

Option Compare Database

Option Explicit

Dim N(8) As Integer

Public Sub Calc()

    Dim i As Integer

   

    Dim t1 As Single

    t1 = Timer

   

    For i = 1 To 1000

        N(0) = 5

        N(1) = 1

        N(2) = 3

        N(3) = 7

        N(4) = 9

        N(5) = 2

        N(6) = 4

        N(7) = 6

        N(8) = 8

        

        P1379

    Next i

   

    Debug.Print Timer - t1

End Sub

Private Sub P1379(Optional x As Integer = 1)

    Dim y As Integer

    Dim tmp As Integer

   

    If x = 4 Then

        P2468

        Exit Sub

    Else

        P1379 x + 1

        For y = x + 1 To 4

             tmp = N(x)

             N(x) = N(y)

             N(y) = tmp

            

             P1379 x + 1

            

             N(y) = N(x)

             N(x) = tmp

        Next y

    End If

End Sub

Private Sub P2468(Optional x As Integer = 5)

    Dim y As Integer

    Dim tmp As Integer

   

    If x = 8 Then

        If Check Then

            'Debug.Print N(1) & N(5) & N(2) & N(6) & N(0) & N(7) & N(3) & N(8) & N(4)

        End If

        Exit Sub

    Else

        P2468 x + 1

        For y = x + 1 To 8

             tmp = N(x)

             N(x) = N(y)

             N(y) = tmp

            

             P2468 x + 1

            

             N(y) = N(x)

             N(x) = tmp

        Next y

    End If

End SubPrivate Function Check() As Boolean

    If (N(1) + N(5) + N(2)) Mod 3 <> 0 Then Exit Function    '3

    If (N(2) * 10 + N(6)) Mod 4 <> 0 Then Exit Function      '4

    If (N(1) + N(5) + N(2) + N(6) + N(7)) Mod 3 <> 1 Then Exit Function '6

    If (N(7) * 100 + N(3) * 10 + N(8)) Mod 8 <> 0 Then Exit Function '8

    If CLng(N(1) & N(5) & N(2) & N(6) & 5 & N(7) & N(3)) Mod 7 <> 0 Then Exit Function '7

    Check = True

End Function
6#
发表于 2005-10-21 19:31:00 | 只看该作者
经过LucasLynn 的超强分析,进行改进,时间为 0.42毫秒Public Sub mNumTest(Optional Num& = 0, Optional N% = 1)

Static ik(1 To 9) As Boolean

Dim i%

For i = 1 - (N Mod 2 = 0) To 9 + (N Mod 2 = 0) Step 2

   If Not ik(i) Then

      If (10 * Num + i) Mod N = 0 Then

         ik(i) = True

         If N = 9 Then

            Debug.Print 10 * Num + i

         Else

            mNumTest 10 * Num + i, N + 1

         End If

         ik(i) = False

      End If

   End If

Next

End Sub
7#
发表于 2005-10-22 01:14:00 | 只看该作者
look look
8#
发表于 2005-11-17 17:03:00 | 只看该作者
OK
9#
发表于 2006-1-23 02:51:00 | 只看该作者
for "以下内容只有回复后才可以浏览"
10#
发表于 2006-2-2 17:50:00 | 只看该作者
看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 20:43 , Processed in 0.092189 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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