回 帖 发 新 帖 刷新版面

主题:又 是 一 道 郁 闷 的 题 目 请大家帮忙^0^

用已知字符串s中字符,生成有其中n个字符组成的所有字符排列.设n小于字符窜个数,其中s中的字符在每个排列中最多出现一次
例如s="abc";n=2
结果是  ab,ac,cd,bc,ba,ca

最好用B语编的[em3]

回复列表 (共3个回复)

沙发

大家帮我想想看,我老是要出错的
哎~~~没折了

板凳

我们的老师编的啊!!!

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 楼

什么叫B语? BASIC 还是 Basic ?

[url=http://www.programfan.com/club/showbbs.asp?id=48214]请看这一张旧贴,推荐好好学习.[/url]

我来回复

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