3位不同数字的组合数 asp如何写

3位不同数字的组合数
如:
数组
a="001,002,003"
他们的组合:001002003,001003002,002001003,002003001,003001002,003002001
用asp怎么自己动算出来

第1个回答  2009-06-10
参考这个程序吧。。这个比你那复杂的多了

<%
'定义要取数字的数组
aaa=Array(0,1,2,3,4,5,6,7,8,9)

'数组上限,这个的上限是9
countaaa=ubound(aaa)

'排列组合的序号,这里从零开始
m=0

'取数字的数量,N>0
n=5

'重定义数组bbb()和CCC(),bbb()用来存储最终取出的M组数字对应的AAA数组里面的下标,CCC()用来缓存BBB()中第M组数字的下标
redim bbb(m)
redim ccc(n)
'把这个CCC()先让他从第一个数字开始依次取N个,本例就是CCC(0)=0,ccc(1)=1,...,ccc(4)=4
for i=0 to n-1
ccc(i)=i
next
'把第一组赋值给bbb(0),也就是第一组取出来的5个数字的下标
bbb(0)=ccc

response.write "<br>"&m&":"
'循环打印出这个BBB(0),结果是0,1,2,3,4
for i=0 to n-1
response.write bbb(0)(i)&"~"
next

'第一组数字出来了,M加一,开始取第二组
m=m+1
'进入循环,当每组数字的第一个取到再取就重复或不合要求的时候为止,本例来说就是,当取到对应AAA下标是5,6,7,8,9这5个数字的时候,就不能往下取了,就完了,所以循环到此结束
while bbb(m-1)(0)<countaaa-n+1

'重定义一下BBB(M),改变一下长度,加个PRESERVE保存之前的数据,刚开始想用二维数组结果到这里的时候就出错,最后查了资料才知道这个PRESERVE只能改变多维数组最后一维的长度并保存数据,第一维的长度就没法变了,否则出错,所以我们都把它换成一维的数组来做。
redim PRESERVE bbb(m)
'打印一下这个M到多少了
response.write "<br>"&m&":"

'每次新取的这组数字,都是由上次取出的最后一个数字右移取它下一个得出来的,比如第一组是0,1,2,3,4那么第二组就是0,1,2,3,5 这样顺序往后取的,当然这只是顺序的排列组合。
ccc(n-1)=ccc(n-1)+1
'判断是否要进位,因为最后一个数字往右走总要到头的,比如0,1,2,3,9取完了就该取0,1,2,4,5了,顺序且不能重复。
jinweixunhuan
'判断是否进位并进行处理之后把这次取出的CCC数组赋值到第M个BBB()里
bbb(m)=ccc

'循环打出本次取出的N个数字
for i=0 to n-1
response.write bbb(m)(i)&"~"
next

'进入下次循环
m=m+1
wend

'判断是否要进位并进行处理的过程
sub jinweixunhuan()
'从最后面开始检查是否需要进位。因为都是最后一个数字在往后移,移到末尾的时候下次取就要它前面一位往右移了,然后它本身就移到已经移好的它上一位的右边,这里就叫他进位吧。
for i=n-1 to 1 step -1
'判断是否移到了最右边
if ccc(i)>countaaa-n+1+i then
'如果进位,上一位右移,加一是下标加一
ccc(i-1)=ccc(i-1)+1

'随后本位移到进位之后的上一位的右边,其他的不变,但是这里只进位了一次,如果是0,1,2,8,9取完后下面取得时候要进位就成了这样0,1,2,9,X但是这样就取不到了并且报错,那么就要多判断几次进位,然后走到最右端不能再往右取得这一位先赋值成-1,等它前面的数字经过几次进位全部安排好了再从左到右依次把-1改成它前面的数字加一就可以了,比如0,1,2,8,9再取就是0,1,2,9,-1然后再进位就是0,1,3,-1,-1现在不需要进位了就从左边第一个-1开始把它改成它左边的数字加1,就变成了0,1,3,4,5了,这样就符合要求了
ccc(i)=-1
'递归检查是否还需要进位
jinweixunhuan
end if
next

'这里就把-1从左到右全部改正确了
for i=1 to n-1
if ccc(i)=-1 then
ccc(i)=ccc(i-1)+1
end if
next
end sub
%>
第2个回答  2009-06-18
<%
a="01,02,03,04"
darray=split(a,",")
for i=0 to ubound(darray)-1
j=i+1
for f=j to ubound(darray)
response.Write""&darray(i)&""&darray(f)&","
next
next

%>
第3个回答  2009-06-10
问题要说明白,我没看懂问题。

如何用asp做排列组合
一定要用ASP写吗,其实可以把数字传到SQLServer中,让每个字符作为一行,利用迪卡尔运算(cross),就可以自动生成从小到大的顺序排列了。

asp 几个字母随机组合字母写?
OutStr = OutStr & ItemList(Int((UBound(ItemList) - 0 + 1)*Rnd + 0))Next Response.Write(OutStr)这里是随机生成5位随机数

asp 随机 生成 3到6位数
最大为6位数,因为数字从0开始的,所以要得到6,需要+1if a<3 then a=3 '最小生成3位数for i = 1 to aint_str=int_str&int(10*rnd)'0到9的数字随机生成组合起来nextresponse.write int_str%>1000000 你这个可是7位数。

ASP正则表达式求教汉字字母数字和下划线的组合怎么写
\/^[\一-\龥\\w\\d]+$\/u 解释:\一-\龥 表示中文 \\w 表示字母及下划线 \\d 表示数字 注意:要让这个正则生效,你的网页必须是utf-8编码,否则中文部分无效

ASP网站 我想获取3条连着的记录 根据ID随机获取一条记录 然后ID+1,ID...
sql="Select TOP 3 * From 表 Order By NewID()"这儿的newid()是随机取读取记录

ASP中可以让字符串和数字组合成一个新的字符串吗? 例如:让"list" 和...
您好!可以实现,方法如下:将数字5类型转换成字符串型string,然后直接+或&操作即可

asp程序里如何限制英文或数字或英文数字组合注册ID? 如下代码中如何添加...
回答:把ID里的字符一个个替换掉,最后如果长度大于0就表示含有非法字符...笨办法,会的话可以用正则表达式 function chkstr(strx) str = "1,2,3,4,5,6,7,8,9,0,a,b......" arr = split(str,",") for i = 0 to ubound(arr) strx = replace(strx,arr(i),"") next if len(...

ASP的介绍``
融领域的ASP。 ASP正在IT经济大潮中显山露水,其发展前景不可估量。 3.ASP的发展阶段和面临的问题 以网络服务商、软件厂商和ISP为主力的各种IT角色,正在根据自己的优势条件出 发对ASP领域进行多种方面的尝试。就目前阶段来讲,ASP提供的服务不计其数五 花八门,没有标准化和量化的概念,硬件厂商向ASP的“土壤”和...

用asp怎么编写验证码?
生成随机四位数字:zNum = cint(8999*Rnd+1000)传递给session Session("GetCode") = zNum 该for循环是将随机数字放入一个下标3的数组,便于提供给后面的阵列变换 dim zimg(3),NStr NStr=cstr(zNum)For i=0 to 3 zimg(i)=cint(mid(NStr,i+1,1))Next dim Pos '定义二个 ADODB.Stream...

asp.net中怎样把数字转换为大写
'不含有小数的数据其数字对应的单位 onestr(i)=mid(string2,14-length+i,1)else '含有小数的数据其数字对应的单位 onestr(i)=mid(string2,15-length+i+len(thenumber)-checkp,1)end if one(i)=one(i)&onestr(i)'将数字与单位组合 next Money=replace(join(one)," ","") '取得数组...

相似回答