回 帖 发 新 帖 刷新版面

主题:大虾们,救命啊!

任意输入M个字符,编程输出任取N个字符的所有情况。(M>=N)

比如
M=5,N=2
字符串输入:ASDFG
输出
AS AD AF AG SA SD SF SG DA DS DF DG FA FS FD FG GA GS GD GF
高手出来

回复列表 (共14个回复)

11 楼

我这样理解不知对不对?!兄弟们帮我看一下!
首先三个数组的作用:
C():保存从Q$字符串中逐个取字符的位置,如果M=5也就是每个序列是5个字符.则C(X)取值分别是1,2,3,4,5
A():是根据C(X)的位置置数,决定该位置是否可以取字符.如果A(X)置数为0说明可以取字符串,如果A(X)置数为1则说明不可以取字符串.
B():保存每次从Q$中取出来的字符.最后显示出来。
举个例子:
以M=5,N=3为例:
说明C(X)取值应该从1-5
开始:先C(X)为1,初始值A(1)=0,然后把A(1)置1,为了避免下次再从一号位置取字符,再根据b(x) = MID$(q$, c(x), 1)从Q$中取出第一个字符给B(3),(X的初始值是刚传过来的N值=3,所以传给B(3)).
   接下来再次调用QQ函数,X=2,令C(X)=1,而A(1)刚才前面已经置1,所以不能取字符,那么转而去执行CONTINUE,使C(X)=2,初始值A(2)=0,然后把A(2)置1,为了避免下次再从一号位置取字符,再根据b(x) = MID$(q$, c(x), 1)从Q$中取出第二个字符"S"给B(2),(因为现在X=2)
   同样再次调用QQ函数,X=1,前面因为A(1),A(2)都为1,说明在第1,2位置不能再取数,通过CONTINUE令C(X)=3,初始值A(3)=0,然后把A(3)置1,从第三位置取出字符"D"给B(1),然后显示B(3)-B(1)"ASD".
   再通过a(c(x)) = 0使A(3)=0,通过CONTINUE令C(X)=4,而A(4)=0,则从第四位置取字符"F"给B(1),因为X的值没发生变化还是上一步时的取值1.再显示B(3)-B(1),"ASF".
   同样,C(X)=5,因A(5)=0,则从第五位置取字符"G"给B(1),再显示B(3)-B(1),"ASG".
   再C(X)=6,退出DO循环.END SUB结束最内层的函数调用.返回到上一层,那么程序应该执行到子程序内的CALL QQ(X-1)语句后面,而且此时X的值也因为返回到上一层,使X=2,则ELSE IF X=1 条件不符合.执行下面A(C(X))=0,使A(2)=0,到目前为止应该是A(2)A(3)A(4)A(5)的值都为0,A(1)为1,通过CONTINUE令C(X)=3,因A(3)=0,则从第三位位置取字符"D"给B(2).
   再调用CALL QQ(X-1),C(X)=1,因为A(1)=1,则执行CONTINUE,C(X)=2,因A(2)=0,所以从第二位置取字符"S",给B(1),因为X=1所以再显示B(3)-B(1),B(3)不变还是刚才的"A",那么显示"ADS".同时A(1)=0,但A(2)=1,A(3)=1,A(4)=0,A(5)=0
   C(X)=2,因A(2)=1,A(3)=1则C(X)=4,取第四个字符"F"B(1),则显示"ADF",再取第五个"G"给B(1),显示"ADG".此时,A(1)=1
   再返回至CALL QQ(X-1)后语句,X=2,C(X)=3,执行ENDIF后面,C(X)=4,A(4)=0,所以取出第四位"F"给B(2),调用QQ(X-1),X=1,C(X)=1,因A(1)=1,则C(X)=2,因A(2)=0,则取出第二位"S"给B(1),显示B(3)-B(1),B(3)不变,"AFS",C(X)=3,因为A(3)=0,所以取出第三个"D"给B(1),显示"AFD",C(X)=4,因为A(4)=1,则C(X)=5,因A(5)=0,则取第五位"G"给B(1),显示"AFG".
   然后一直套下去,
  我是这样套出来的,但他怎么会想得出这个办法啊,让我想我是绝对想不出这招啦!
  强!
  请楼主谈谈思路.
[em4]

12 楼

这么说是对选出的进行标记?

dddduuuu还卖什么关子啊,来讲一下嘛。又不是什么技术含量超高的东西。

13 楼

老大分析的很明白了,我没什么要说的啊!
谢谢老大,我不知道怎么分析程序!!!!!请大家多多原谅

我有C语言写的源程序,我只是把它翻译成了QBASIC。
C语言的程序我也早附上了,实在没有关子可卖啊,各位老大![em10]

14 楼

老大,如果我想这样打印,怎么编写呢?

例:将“AB,CDE,F”分解为以下组合:(这里m=3,n=2)
AC
AD
AE
AF
BC
BD
BE
BF
CF
DF
EF

(即:同一小组的字母不能组合在一起,AB和BA被认为是相同组合)

我来回复

您尚未登录,请登录后再回复。点此登录或注册