ASP 难题编程高手来帮忙100+100

作者&投稿:佛彪 (若有异议请与网页底部的电邮联系)
asp编程难题~

你的公式都写出来了,计算的时候把你这些数字赋值给变量,10%就是0.1;算出来就可以了,

当b c d任何人的积分增时候这时候a的总积分也随之增如何实现,这你肯定要用数据库吧,更新b c d任何一个人的积分的时候同时更新a的积分就可以了!

Db = "/database/bbsxp6.mdb" '数据库路径
改行前面的/去掉试试。。
因为本机(localhost)前面有/的目录打不开
Db = "database/bbsxp6.mdb" '数据库路径

思路:将数组随机打乱次序,再取出其中两个,本例取前两个数,绝对随机,不会有“一一”、“六六”之类的重复数据
<%
dim list_no:list_no=20
dim a:a=array("一","二","三","四","五","六","七")
dim n,i,j,c(6)
for i=0 to 6
c(i)=0 '初始化统计数
next
%>
本次随机次数<%=list_no%>次 (要中文显示的)<br><br>

<%
leng=UBound(a)
n=0
do while n<list_no
'随机排序
randomize
for i=0 to leng
d=int(rnd()*leng)
temp=a(d)
a(d)=a(i)
a(i)=temp
temp=c(d)
c(d)=c(i)
c(i)=temp
Next
'取出随机排序后的前两个数,作为一组随机数
c(0)=c(0)+1
c(1)=c(1)+1
response.write n+1&". "&a(0)&" "&a(1)&"<br>"
n=n+1
loop

%>
<br>统计结果(最多的要排在前面)<br><br>
<%
for i=0 to UBound(c)-1
for j=i+1 to UBound(c)
if c(i)<c(j) then
temp=a(i)
a(i)=a(j)
a(j)=temp
temp=c(i)
c(i)=c(j)
c(j)=temp
end if
next
next
for i=0 to 6
response.write a(i)&" "&c(i)&"次<br>"
next
%>
运行结果:
本次随机次数20次 (要中文显示的)

1. 一 三
2. 六 三
3. 三 五
4. 五 二
5. 四 五
6. 六 五
7. 七 一
8. 一 四
9. 六 七
10. 二 三
11. 二 六
12. 六 七
13. 二 七
14. 六 七
15. 二 四
16. 七 二
17. 五 六
18. 三 二
19. 五 一
20. 四 三

统计结果(最多的要排在前面)

二 7次
六 7次
五 6次
三 6次
七 6次
四 4次
一 4次

——————————————————

感谢luckynet888的点评。
在此作点补充说明:
上面方案,需要进行7次循环。每一组绝对不会有“一一”“二二”之类的重复数据,但可能有两组或多组重复的情况。例如本次运行就出现三次“六七”,但楼主似乎并没有这种限制。
如果楼主要求不同组间也不能重复,则可用下面方案,但总共只有42种可能,也就是说最多只能有42组数据。这个方案需要进行42次循环.

思路:列出所有42种可能组合,将数组随机打乱次序,再取出数据,要n组就将list_no设为n,n的取值范围是 1~42 ,最多42组,绝对随机,不会重复数据
<%
dim list_no:list_no=20 '随机次数, 1-42,
dim a:a=array("一","二","三","四","五","六","七")
dim n,i,j,b(6),c(6),r(41,1)
for i=0 to 6
b(i)=i
c(i)=0
next
%>
本次随机次数<%=list_no%>次 (要中文显示的)<br><br>

<%
'列出所有42种可能组合
n=0
for i=0 to 6
for j=0 to 6
if i<>j then
r(n,0)=i
r(n,1)=j
n=n+1
end if
next
next

'随机排序
randomize
for i=0 to UBound(r)
d=int(rnd()*UBound(r))
temp0=r(d,0)
r(d,0)=r(i,0)
r(i,0)=temp0
temp1=r(d,1)
r(d,1)=r(i,1)
r(i,1)=temp1
Next
'列出结果
for j=0 to list_no-1
c(r(j,0))=c(r(j,0))+1
c(r(j,1))=c(r(j,1))+1
response.write j+1&". "&a(r(j,0))&" "&a(r(j,1))&"<br>"
next

%>
<br>统计结果(最多的要排在前面)<br><br>
<%
for i=0 to UBound(c)-1
for j=i+1 to UBound(c)
if c(i)<c(j) then
temp=a(i)
a(i)=a(j)
a(j)=temp
temp2=c(i)
c(i)=c(j)
c(j)=temp2
end if
next
next
for i=0 to 6
response.write a(i)&" "&c(i)&"次<br>"
next

%>
运行结果:
本次随机次数20次 (要中文显示的)

1. 一 七
2. 五 一
3. 二 五
4. 二 六
5. 六 二
6. 五 六
7. 一 二
8. 一 六
9. 四 七
10. 七 二
11. 三 五
12. 二 一
13. 一 五
14. 六 五
15. 七 六
16. 五 三
17. 二 七
18. 六 七
19. 五 四
20. 五 二

统计结果(最多的要排在前面)

五 9次
二 8次
六 7次
一 6次
七 6次
四 2次
三 2次

貌似比较难,我给你试一下,呵呵~~~
明天给你回复

先留个记号……

<%
dim crnd:crnd=array("一","二","三","四","五","六","七")
dim num:num=array(0,0,0,0,0,0,0)
dim icount,ii,i,j,itemp1,itemp2

dim rndarr(19)'生成随机数的数量
for i=0 to ubound(rndarr)'产生数组
rndarr(i)=getrnd()
chk=check(i)
while (chk=false)
rndarr(i)=getrnd()
chk=check(i)
wend
next

for i=0 to ubound(rndarr)'计算数字出现的次数
for j=0 to ubound(crnd)
if instr(rndarr(i),crnd(j))>0 then num(j)=num(j)+1
next
next

'对统计结果进行排序
icount=Ubound(num)
for i=0 To icount
for j=icount - 1 To i Step -1
if j+1 <= icount Then
if int(num(j))<int(num(j+1)) Then
itemp1=num(j)
num(j)=num(j+1)
num(j+1)=itemp1
itemp2=crnd(j)
crnd(j)=crnd(j+1)
crnd(j+1)=itemp2
end if
end if
next
next

response.write"本次生成随机数"&ubound(rndarr)+1&"个<br>"
for i=0 to ubound(rndarr)
response.write rndarr(i)
response.write "<br>"
next

response.write "<br>统计结果:<br>"
for j=0 to ubound(num)
response.write crnd(j)&":"
response.write num(j)
response.write "次<br>"
next
%>

<%
function rndnumber(maxnum,minnum) '生成1个maxnum-minnum之间的随机数
randomize
rndnumber=int((maxnum-minnum+1)*rnd+minnum)
rndnumber=rndnumber
end function

function getrnd()'生成1组随机数,一组2个
dim rnd1:rnd1=0
dim rnd2:rnd2=0
while (rnd1=rnd2)
rnd1=rndnumber(0,8)
rnd2=rndnumber(0,8)
wend
getrnd=crnd(rnd1-1)&crnd(rnd2-1)
end function

function check(n)'检测是否有重复
check=true
for j=0 to n-1
if rndarr(j)=rndarr(n) then
check=false
exit function
end if
next
end function
%>

测试结果(因为发不了图,只有复制粘贴了):

本次生成随机数20个
四五
六三
五六
四三
七二
五二
七五
一五
三五
二一
一七
六四
七六
六二
二七
六五
一六
四一
六七
二四

统计结果:
六:8次
五:7次
二:6次
七:6次
一:5次
四:5次
三:3次

看来高手还真不少。
lzp4881 和 greratshi 的方案都可行,但生成随机数的执行效率不同。

lzp4881 的方案,在从较大取值范围内生成少量几个随机数时,重复机率较小,效率较高,本例一到两个循环大概就行了。但如果生成随机数的个数与较大取值范围内接近时,重复机率较大,循环次数就会较多,比如要从0~1000取900个随机数,可能就会有麻烦,循环次数就会非常大,要从0~10000取9000个随机数,那可能会是天文数据。
所以这种方案属于投机型。

greratshi的方案属于稳健型,从7个数中取,无论取几个随机数,都循环7次;从10000个数中取,无论取几个随机数,都循环10000次,较为稳健,但如果从10000个数中只取很少几个随机数,都循环10000次,就显得有点浪费。

所以两个方案各有优缺点,可根据具体情况选用。