设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 9864|回复: 19
打印 上一主题 下一主题

[高0]求最短的代码.

[复制链接]
跳转到指定楼层
1#
发表于 2005-3-19 03:09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求用户输入一个字串,电脑输出这个字串的全排序,如:

当用户输入"ABC"时,电脑输出:

ABC

ACB

BAC

BCA

CAB

CBA

当用户输入"ABCD"时,电脑输出:

ABCD

ABDC

ACBD

ACDB

...

最短代码者胜出![em03]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-3-20 02:17:00 | 只看该作者
Dim a, x, y, z As String

Dim i, s, n, k As Integera = InputBox("请输入一个字附串")

i = Len(a)

   's 为完全排列的总数量

s = i

For n = 1 To i - 1

s = s * (i - n)

NextDo

   Do

     x = Mid(a, Int(Rnd * i + 1), 1)

     If InStr(y, x) = 0 Then y = y & x

   Loop Until Len(y) = i

   

   If InStr(z, y) = 0 Then

     z = z & y & ";"

     y = ""

     k = k + 1

   End If

Loop Until k = s

MsgBox z
3#
 楼主| 发表于 2005-3-20 03:58:00 | 只看该作者
情比金坚的答案不行呀,我输入了ABC之后再执行,没有输出正确的答案..有人能做这题吗?[em08]
4#
发表于 2005-3-20 04:55:00 | 只看该作者
我也知道,还在想,你认为错在哪了?(用for...next,多试几次就行)



请李老师指点一下:我的想法那么单纯,为啥实现不了呢?



[此贴子已经被作者于2005-3-19 22:35:57编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
 楼主| 发表于 2005-3-20 09:55:00 | 只看该作者
这种算法是不行的.你使用RND来求所有的可能排序,如果用户输入的字串很长,如"abcdefg",序列的数量就会非常多,RND什么时候才能碰得完所有的序列?很可能等上非常上的时间才能完成,或者永远也完成不了,因为RND是一个未知值,等待的时间也是未知的!!![em06]我用的算法,只是执行几条指令就可以马上得到新的排序.而且是按顺序的.所有指令执行完的话,就已经求出了全部的排序.千万不能少看这题目,有兴趣的人可以做做....[em07]
6#
发表于 2005-3-20 21:31:00 | 只看该作者
可以完成,但我想有点犯规:







只有我们在玩,他们都不来~~~~~~[em04]

[此贴子已经被作者于2005-3-20 13:33:30编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
7#
发表于 2005-3-20 23:28:00 | 只看该作者


Private Sub 命令0_Click()

    Dim i As Integer, j As Integer, strSql(4) As String

    For i = 0 To DCount("*", "表1") - 1

        strSql(1) = strSql(1) & " & [" & i & "]"

        strSql(2) = strSql(2) & ",[" & i & "].txt as " & i

        strSql(3) = strSql(3) & ",表1 as " & i

        For j = i + 1 To DCount("*", "表1") - 1

            strSql(4) = strSql(4) & " and [" & i & "]<>[" & j & "]"

        Next j

    Next

    CurrentDb().QueryDefs("Sql").SQL = "SELECT " & Mid(strSql(1), 4) & " as Str FROM (select " & Mid(strSql(2), 2) & " from " & Mid(strSql(3), 2) & ") where (" & Mid(strSql(4), 6) & ")"

    DoCmd.OpenQuery "Sql"

End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
8#
 楼主| 发表于 2005-3-21 02:56:00 | 只看该作者
Trynew的方法可是强哦,我用的是纯计算方法.看来TryNew的代码是最短了.哈哈....[em02]
9#
发表于 2005-3-21 03:43:00 | 只看该作者
可是我连计算也不会,只会瞎猫抓耗子的方法,李老师给个提示看看[em02]
10#
 楼主| 发表于 2005-3-21 07:48:00 | 只看该作者
插入一个模块,再运行RunMe就可以了.

Dim InPutString As String

Sub GetData(s As String, temp As String)

  Dim i As Integer

  If Len(temp) = Len(InPutString) Then

    MsgBox temp

  Else

    For i = 1 To Len(s)

      GetData Left(s, i - 1) & Right(s, Len(s) - i), temp + Mid(s, i, 1)

    Next i

  End If

End Sub

Sub RunMe()

  InPutString = InputBox("请输入一个字串:", , "ABC")

  GetData InPutString, ""

End Sub





[em05]呵呵,经过代码优化,我只用了11句代码哩!!(不含过程首尾)

[此贴子已经被作者于2005-3-20 23:49:42编辑过]

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

本版积分规则

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

GMT+8, 2024-4-20 15:44 , Processed in 0.101526 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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