回 帖 发 新 帖 刷新版面

主题:[哆嗦贴] 新排列(利用字符串)

如果是单字符全选排列的话,还有一个方法:

a$ = "0123"                                    '顺序排列好,为最小值
l = LEN(a$)

DO
  PRINT a$
  GOSUB 10
LOOP
END


10                                              '找下一个排列方式
for e=(l-1) to 1 step -1                        '找不合适的位置 e
  if mid$(a$,e,1)<mid$(a$,e+1,1) then exit for
next
if e<1 then end

FOR i = l TO (e + 1) STEP -1                    '找需要交换的位置 i
    IF MID$(a$, i, 1) > MID$(a$, e, 1) THEN EXIT FOR
NEXT
  b$ = MID$(a$, i, 1)                           '交换字符
  MID$(a$, i, 1) = MID$(a$, e, 1)
  MID$(a$, e, 1) = b$

FOR i = (e + 1) TO (l + e + 1) \ 2              '对后面段的字符排顺序
    j = l + e + 1 - i
    b$ = MID$(a$, i, 1)
    MID$(a$, i, 1) = MID$(a$, j, 1)
    MID$(a$, j, 1) = b$
NEXT
RETURN

回复列表 (共5个回复)

沙发

做成函数

a$ = "0123"                                    '顺序排列好,为最小值
print a$
DO
  PRINT nextpl$(a$)
LOOP until a$=""
END

function nextpl$(a$)
l=len(a$)
for e=(l-1) to 1 step -1                        '找不合适的位置 e
  if mid$(a$,e,1)<mid$(a$,e+1,1) then exit for
next
if e<1 then
   a$=""
   exit function
endif

FOR i = l TO (e + 1) STEP -1                    '找需要交换的位置 i
    IF MID$(a$, i, 1) > MID$(a$, e, 1) THEN EXIT FOR
NEXT
  b$ = MID$(a$, i, 1)                           '交换字符
  MID$(a$, i, 1) = MID$(a$, e, 1)
  MID$(a$, e, 1) = b$

FOR i = (e + 1) TO (l + e + 1) \ 2              '对后面段的字符排顺序
    j = l + e + 1 - i
    b$ = MID$(a$, i, 1)
    MID$(a$, i, 1) = MID$(a$, j, 1)
    MID$(a$, j, 1) = b$
NEXT
nextpl$=a$
end function

板凳

看不懂,题目说得明白些吧!
菜鸟眼中的你。。。。

3 楼

题目?
可以这样说吧:  列出由 0123 四个数字组成的所有排列.

4 楼

再来一次修改
取消停止位置
改为无穷下一排列:

function nextpl$(a$)
l=len(a$)
for e=(l-1) to 1 step -1            
  if mid$(a$,e,1)<mid$(a$,e+1,1) then exit for
next
if e>0 then
  FOR i = l TO (e + 1) STEP -1        
    IF MID$(a$, i, 1) > MID$(a$, e, 1) THEN EXIT FOR
  NEXT
  b$ = MID$(a$, i, 1)               
  MID$(a$, i, 1) = MID$(a$, e, 1)
  MID$(a$, e, 1) = b$
end if
FOR i = (e + 1) TO (l + e + 1) \ 2  
    j = l + e + 1 - i
    b$ = MID$(a$, i, 1)
    MID$(a$, i, 1) = MID$(a$, j, 1)
    MID$(a$, j, 1) = b$
NEXT
nextpl$=a$
end function

5 楼

吓死数学老师,呵呵

我来回复

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