回 帖 发 新 帖 刷新版面

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

闲着没事,我又弄了一个比较简便的组合函数
可以很方便的和之前做的排列函数结合使用
只是存在一个缺点,就是不能有相同重复的字符
利用的字符串,当然,只要你有需要,
你可以很方便的延伸出去的。

例:6个字符中取4个字符的组合

a$="123456"
b$=right$(a$,4)
do
  print b$;
loop until nextzh$(a$,b$)=""
end

---------------------------------------------函数体,简单的让人有点担心。
function nextzh$(a$,b$)
for i=1 to len(b$)
  if instr(1,a$,mid$(b$,i,1))>i then
     mid$(b$,1,i)=mid$(a$,instr(1,a$,mid$(b$,i,1))-i,i)
     nextzh$=b$
     exit function
  endif
next
end function

回复列表 (共3个回复)

沙发

moz
我是一名新手
想请教个问题:

键盘输入n(1<=n<=10)
用1-n排列
就有n!种方法
在输入m(m的范围是0-n!-1)
求m对应的数

帮帮忙
我想了很久 
没想出来

板凳

先举例找规律:
当n=3的时候: 这是从小到大的顺序排列
123  1开头的占1/3 
132         后面的顺序又按2来分配,跟阶乘是一样的道理。
213  2开头的在2/3
231
312  3开头的在3/3
321

所以写出以下程序,你有时间自己研究一下:
input n, m    'n = 4:m = 23
z$ = Left$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", n)
kk = 1
For k = 1 To n
    kk = kk * k
Next
m = m - 1
For i = n To 1 Step -1
    kk = kk \ i
    x = m \ kk + 1
    f$ = f$ + Mid$(z$, x, 1)
    z$ = Left$(z$, x - 1) + Mid$(z$, x + 1)
    m = m Mod kk
Next
Print f$

3 楼

谢谢

我来回复

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