主题:又 是 一 道 郁 闷 的 题 目 请大家帮忙^0^
lushoufa
[专家分:140] 发布于 2005-07-27 14:32:00
用已知字符串s中字符,生成有其中n个字符组成的所有字符排列.设n小于字符窜个数,其中s中的字符在每个排列中最多出现一次
例如s="abc";n=2
结果是 ab,ac,cd,bc,ba,ca
最好用B语编的[em3]
回复列表 (共3个回复)
沙发
lushoufa [专家分:140] 发布于 2005-07-27 14:44:00
大家帮我想想看,我老是要出错的
哎~~~没折了
板凳
zqnhlm [专家分:780] 发布于 2005-07-27 16:08:00
我们的老师编的啊!!!
DECLARE FUNCTION lct% (i AS INTEGER, n AS INTEGER)
DIM s AS STRING
DIM n AS INTEGER
DIM l AS INTEGER
DIM f AS INTEGER
INPUT "s=", s
INPUT "l=", l
n = LEN(s)
DIM b(1 TO n) AS STRING
DIM a(1 TO l) AS INTEGER
DIM SHARED flag(1 TO n) AS INTEGER
FOR i = 1 TO n
flag(i) = 0
NEXT i
FOR i = 1 TO n
b(i) = MID$(s, i, 1)
NEXT i
FOR i = 1 TO n
k = i
FOR j = i TO n
IF ASC(b(k)) > ASC(b(j)) THEN
k = j
END IF
NEXT j
IF k <> i THEN
SWAP b(k), b(i)
END IF
NEXT i
m = 1
flag(1) = 1
a(1) = 1
DO WHILE 1
IF m = l THEN
FOR i = 1 TO l
PRINT b(a(i));
NEXT i
PRINT " ";
flag(a(m)) = 0
a(m) = lct(a(m) + 1, n)
IF a(m) <> 0 THEN
flag(a(m)) = 1
ELSE
x: m = m - 1
IF m <= 0 THEN EXIT DO
flag(a(m)) = 0
a(m) = lct(a(m) + 1, n)
IF a(m) <> 0 THEN
flag(a(m)) = 1
ELSE
GOTO x
END IF
END IF
ELSE
m = m + 1
a(m) = lct(1, n)
flag(a(m)) = 1
END IF
LOOP
END
FUNCTION lct% (i AS INTEGER, n AS INTEGER)
DIM v AS INTEGER
FOR v = i TO n
IF flag(v) = 0 THEN lct = v: EXIT FUNCTION
NEXT
lct = 0
END FUNCTION
3 楼
moz [专家分:37620] 发布于 2005-07-27 16:30:00
什么叫B语? BASIC 还是 Basic ?
[url=http://www.programfan.com/club/showbbs.asp?id=48214]请看这一张旧贴,推荐好好学习.[/url]
我来回复