| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 220 人关注过本帖
标题:取排列组合数,翻出来的以前垃圾代码
只看楼主 加入收藏
sych
Rank: 4
等 级:业余侠客
威 望:7
帖 子:237
专家分:290
注 册:2019-10-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
取排列组合数,翻出来的以前垃圾代码
使用方法?plzhnum(10,5,100,1)  &&输出从10(第一个参数)个中取5(第二个参数)个的全排列的第100(第三个参数)位排列
        ?plzhnum(10,5,100,0)  &&输出从10(第一个参数)个中取5(第二个参数)个的全组合的第100(第三个参数)位组合

proc plzhnum
lpara n,m,s,p
local z,jg,num,j,i,num0,pl,zh
note plzh(n,m,p),S为plzh(n,m,p)的第S条记录
z=plzh(m.n,m.m,m.p)
jg=''
if EMPTY(m.p)
  if m.s<m.z
    num=0
    j=1
    do whil m.num<m.s
      i=iif(''=m.jg,1,val(subs(m.jg,rat(',',m.jg)+1))+1)
      do whil m.num<s and m.n-m.i>=m.m-m.j
        num0=plzh(m.n-m.i,m.m-m.j,0)
        num=m.num+m.num0
        i=m.i+1
      enddo
      jg=m.jg+','+ltri(str(m.i-1))
      num=iif(m.s<m.num,m.num-m.num0,m.num)
      j=m.j+1
    enddo
  endif
  do whil occu(',',m.jg)<m.m
    jg=m.jg+','+ltri(str(m.n-m.m+1+occu(',',m.jg)))
  enddo
  jg=m.jg+','
else
  pl=plzh(m.m,m.m,1)
  if m.s<m.z
    zh=ceil(m.s/m.pl)
    num=0
    j=1
    do whil m.num<m.zh
      i=iif(''=m.jg,1,val(subs(m.jg,rat(',',m.jg)+1))+1)
      do whil m.num<m.zh and m.n-m.i>=m.m-m.j
        num0=plzh(m.n-m.i,m.m-m.j,0)
        num=m.num+m.num0
        i=m.i+1
      enddo
      jg=m.jg+','+ltri(str(m.i-1))
      num=iif(m.zh<m.num,m.num-m.num0,m.num)
      j=m.j+1
    enddo
    num=mod(m.s-1,m.pl)+1
  else
    num=m.pl
  endif
  do whil occu(',',m.jg)<m.m
    jg=m.jg+','+ltri(str(m.n-m.m+1+occu(',',m.jg)))
  enddo
  zh=m.jg+','
  jg=','
  for m.i=1 to m.m
    pl=plzh(m.m-m.i,m.m-m.i,1)
    j=subs(m.zh,at(',',m.zh,ceil(m.num/m.pl)))
    j=left(m.j,at(',',m.j,2))
    zh=stuf(m.zh,at(m.j,m.zh),len(m.j),',')
    jg=m.jg+righ(m.j,len(m.j)-1)
    num=mod(m.num-1,m.pl)+1
  endfor
endif
retu m.jg

proc plzh
lpara n,m,plorzh
local cj,i
cj=1
for i=m.n-m.m+1 to m.n
  cj=m.cj*m.i
endfor
if EMPTY(m.plorzh)
  for m.i=2 to m.m
    cj=m.cj/m.i
  endfor
endif
retu  m.cj
搜索更多相关主题的帖子: num do if str 参数 
2023-10-16 12:02
schtg
Rank: 12Rank: 12Rank: 12
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1549
专家分:3003
注 册:2012-2-29
收藏
得分:20 
回复 楼主 sych
学习啦,谢谢!
2023-10-16 15:22
sych
Rank: 4
等 级:业余侠客
威 望:7
帖 子:237
专家分:290
注 册:2019-10-11
收藏
得分:0 
列出所有从1-10个数字中取出3个数字的全排列
for i=1 to plzh(10,3,1)
    ?plzhnum(10,3,i,1)
next

2023-10-17 11:26
快速回复:取排列组合数,翻出来的以前垃圾代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014720 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved