CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

出一个思考题

楼主lou_df(ldf)2001-08-29 17:03:27 在 VB / 基础类 提问

如何将一个字符串中固定数量的字符做一个全排列,写出程序。举一个例子:abcd   的2个字符的排列是   ab   ac   ad   ba   bc   bd   ca   cb   cd   da   db   dc   。 问题点数:20、回复次数:25Top

1 楼pctommy(pctommy)回复于 2001-08-29 17:47:02 得分 0

我写了一个,你可以试试:  
  Dim   nRange   As   Integer  
  Dim   nDeep   As   Integer  
  Dim   stString   As   String  
  Dim   stOut   As   String  
   
  Function   Start(stOut   As   String)   As   String  
          Dim   i  
          Dim   stPrivate   As   String  
           
          nDeep   =   nDeep   +   1  
          If   nDeep   =   nRange   +   1   Then   nDeep   =   nDeep   -   1:   GoTo   SkipThisLayer  
          For   i   =   1   To   Len(stString)  
                  stPrivate   =   Mid(stString,   i,   1)  
                  stOut   =   Start(stOut   +   stPrivate)  
          Next   i  
           
  :   SkipThisLayer  
  End   FunctionTop

2 楼pctommy(pctommy)回复于 2001-08-29 17:53:38 得分 0

我写了一个,你可以试试:  
  Dim   nRange   As   Integer                                         '要排列几个字符  
  Dim   nDeep   As   Integer                                           '当前深度  
  Dim   stString   As   String                                       '要输入的字符串  
  Dim   stOut   As   String                                             '当前组合  
   
  Function   Start(stOut   As   String)   As   String  
          Dim   i  
          Dim   stPrivate   As   String  
           
          nDeep   =   nDeep   +   1  
          If   nDeep   =   nRange   +   1   Then   nDeep   =   nDeep   -   1:   GoTo   SkipThisLayer  
          For   i   =   1   To   Len(stString)  
                  stPrivate   =   Mid(stString,   i,   1)  
                  If   Instr(stOut,stPrivate)<>0   Then  
                          stOut   =   Start(stOut   +   stPrivate)  
                  End   If  
          Next   i  
           
  :   SkipThisLayer  
  End   FunctionTop

3 楼pctommy(pctommy)回复于 2001-08-29 17:54:38 得分 0

第一程序是错的Top

4 楼lou_df(ldf)回复于 2001-08-30 11:08:29 得分 0

我测试一下。Top

5 楼lou_df(ldf)回复于 2001-08-30 11:27:03 得分 0

无法得出正确结果。Top

6 楼ozw(沧浪客)回复于 2001-08-30 12:28:51 得分 0

是不是想做黑客程序啊!?Top

7 楼lou_df(ldf)回复于 2001-08-30 15:10:43 得分 0

黑客怎么也跟我想到一起去了。不过这个思考题只是看一下大家的功力而已。Top

8 楼ERR(太阳)回复于 2001-08-30 16:19:04 得分 0

两个TextBox,一个输入,一个输出  
  一个CommandButton,运行  
   
  Private   Sub   Command1_Click()  
  Dim   strScan   As   String,   strOut   As   String  
  Dim   i   As   Integer,   iCur   As   Integer,   iLen   As   Integer  
   
      strScan   =   Text1.Text  
      iLen   =   Len(strScan)  
      strOut   =   ""  
       
      For   i   =   1   To   iLen  
          For   iCur   =   1   To   iLen  
              If   iCur   <>   i   Then   strOut   =   strOut   &   Mid(strScan,   i,   1)   &   Mid(strScan,   iCur,   1)   &   "   "  
          Next   iCur  
      Next   i  
       
      Text2   =   strOut  
  End   Sub  
  Top

9 楼pctommy(pctommy)回复于 2001-08-30 16:53:23 得分 20

非常抱歉,我肯定有问题:  
   
  这回保证没有错:  
  Dim   nRange   As   Integer  
  Dim   nDeep   As   Integer  
  Dim   stString   As   String  
  Dim   st1   As   String  
  Dim   st2   As   String  
   
   
   
  Private   Sub   Command1_Click()  
          nRange   =   3  
          stString   =   "abcd"  
           
          st2   =   ""  
          Start   (st2)  
           
           
  End   Sub  
   
  Sub   Start(stPrv   As   String)  
          Dim   i  
          Dim   stPrivate   As   String  
                   
          nDeep   =   nDeep   +   1  
           
          If   nDeep   =   nRange   +   1   Then   nDeep   =   nDeep   -   1:   GoTo   SkipThisLayer  
          For   i   =   1   To   Len(stString)  
                  stPrivate   =   Mid(stString,   i,   1)  
                  If   InStr(stPrv,   stPrivate)   =   0   Then  
                          st1   =   stPrv   +   stPrivate  
                          If   nDeep   =   nRange   Then   MsgBox   st1  
                          Start   (st1)  
                           
                  End   If  
          Next   i  
          nDeep   =   nDeep   -   1  
  SkipThisLayer:  
  End   SubTop

10 楼ColderRain(一切尽在不言中)回复于 2001-08-30 18:57:48 得分 0

《数据结构》里有这样的例题!好象不是这么简单哟!Top

11 楼pctommy(pctommy)回复于 2001-08-30 19:12:34 得分 0

《数据结构》是什么书?Top

12 楼pctommy(pctommy)回复于 2001-08-31 09:35:21 得分 0

upTop

13 楼homqom(操作者)回复于 2001-08-31 09:53:28 得分 0

Dim   nRange   As   Integer  
  Dim   nDeep   As   Integer  
  Dim   stString   As   String  
  Dim   st1   As   String  
  Dim   st2   As   String  
   
   
   
  Private   Sub   Command1_Click()  
          nRange   =   3  
          stString   =   "abcd"  
           
          st2   =   ""  
          Start   (st2)  
           
           
  End   Sub  
   
  Sub   Start(stPrv   As   String)  
          Dim   i  
          Dim   stPrivate   As   String  
                   
          nDeep   =   nDeep   +   1  
           
          If   nDeep   =   nRange   +   1   Then   nDeep   =   nDeep   -   1:   GoTo   SkipThisLayer  
          For   i   =   1   To   Len(stString)  
                  stPrivate   =   Mid(stString,   i,   1)  
                  If   InStr(stPrv,   stPrivate)   =   0   Then  
                          st1   =   stPrv   +   stPrivate  
                          If   nDeep   =   nRange   Then   MsgBox   st1  
                          Start   (st1)  
                           
                  End   If  
          Next   i  
          nDeep   =   nDeep   -   1  
  SkipThisLayer:  
  End   Sub   Top

14 楼pctommy(pctommy)回复于 2001-08-31 10:05:44 得分 0

upTop

15 楼pctommy(pctommy)回复于 2001-08-31 10:07:45 得分 0

如果仅仅完成叙述的功能,回朔就是这么简单Top

16 楼pctommy(pctommy)回复于 2001-08-31 12:38:56 得分 0

upTop

17 楼lou_df(ldf)回复于 2001-08-31 14:46:23 得分 0

pctommy(pctommy)和homqom(操作者)答案一样,如果是同一人,我就给一个人分数。该不会抄袭吧?Top

18 楼pctommy(pctommy)回复于 2001-09-01 15:56:38 得分 0

是我先答的,你不信我就给你vbp文件看。Top

19 楼pctommy(pctommy)回复于 2001-09-01 16:03:56 得分 0

还有,我写程序的时候,string变量我一直都用st前缀,这也算独一无二了  
  homqom(操作者)我根本就不认识!  
   
  我的代码可是写了整整一个下午了啊…………!!  
   
   
   
  Top

20 楼pctommy(pctommy)回复于 2001-09-01 17:22:44 得分 0

不过,给谁分倒不重要,编程是为了快乐,所以才编程Top

21 楼小乖(Xi@oGu@i)回复于 2001-09-01 17:50:18 得分 0

不了解什么意思。Top

22 楼pctommy(pctommy)回复于 2001-09-02 10:57:23 得分 0

不了解什么?如果是程序方面的我可以尽力解释Top

23 楼pctommy(pctommy)回复于 2001-09-02 12:09:02 得分 0

upTop

24 楼lou_df(ldf)回复于 2001-09-03 10:30:48 得分 0

感谢pctommy(pctommy)。分给你了。思考题是帮助大家开拓思路,活跃气氛。这次的题目比较基础一些,相信很多人都感兴趣。Top

25 楼pctommy(pctommy)回复于 2001-09-03 19:42:10 得分 0

好!大家都来研究一些关于算法的东东!Top

相关问题

  • 谁会做思考题?
  • c程序思考题,高分相送
  • 一个数学思考题,大家试试
  • 数据结构,一道排序思考题求解
  • 算是一道思考题 就 25分了 答对的 给
  • 关于内存的思考题(摘自林锐高质量c++编程)
  • 十万火急,请教高手:《软件复用和面向对象软件构造》思考题

关键词

  • 字符
  • start
  • ndeep
  • stprivate
  • ststring
  • nrange
  • stout
  • integerdim
  • stprv
  • 思考题

得分解答快速导航

  • 帖主:lou_df
  • pctommy

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo