数组分组在一行显示,保证结帖给分!

yeorange 经理  2008-12-03 04:58:26
1.问题:分组“闲”与“和”及“庄”与“和”在一行显示
2.代码如下(可独立运行):
<%

if request("mode")="" then
A1=20
A2=20
A3=8
else
A1=cint(request("T1")) : if A1=0 then A1=20
A2=cint(request("T2")) : if A2=0 then A2=20
A3=cint(request("T3")) : if A3=0 then A3=8

if 48-(A1+A2+A3) <0 then
A2=A3+(48-(A1+A2+A3))
end if
end if

dim arr(48),a,b,c
a=A1
b=A2
c=A3

for i1=0 to a+b+c-1
if i1<=a-1 then
arr(i1) ="庄"
elseif i1>a-1 and i1<=a+b-1 then
arr(i1)="闲"
else
arr(i1)="和"
end if
next

str=join(arr)
str=replace(str," ","")

arr_Rnd=GetRnd(1,(a+b+c)) '产生指定个数不重复的48个数

'显示
for i=0 to ubound(arr_rnd) ' a+b+c -1
ARR(i)=Mid(str,arr_rnd(i),1)
response.Write i+1 &"=" &ARR(i) & "|"
next

'分组显示:分组“闲”与“和”及“庄”与“和”在一行显示
response.Write("<hr color=red>分组显示:分组“闲”与“和”及“庄”与“和”在一行显示<br>")

for i=0 to a+b+c-1
if arr(i)="和" or arr(i)="庄" then
response.Write(i+1 &">"& arr(i) )
else
response.Write("<br>"&i+1 &">"& arr(i) )
end if
next

'打乱48(不重的48RND),返回数组
'Rem no copy Number
Function GetRnd(lowerNum,upperNum)
Dim unit,RndNum,Fun_X
unit = upperNum - lowerNum
Redim MyArray(unit)
For Fun_I=0 To unit
myArray(Fun_I)= lowerNum + Fun_I
Next
For Fun_I=0 To round(unit)
RndNum = getRndNumber(Fun_I,unit)
Fun_X = myArray(RndNum)
myArray(RndNum)=myArray(Fun_I)
myArray(Fun_I)=Fun_X
Next
GetRnd = myArray
End Function

function getRndNumber(lowerbound,upperbound)
Randomize
getRndNumber=Int((upperbound-lowerbound+1)*Rnd+lowerbound)
end function
%>
...全文
118 点赞 收藏 31
写回复
31 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yeorange 2009-04-25
不明白 怎 "不厚道" 了?说具体点
回复
bhd1896 2008-12-05
你真他nnd不厚道。
回复
bhd1896 2008-12-05
lz,你真不厚道
回复
开始没看到你有一个换行的在里面,逻辑是和我得一样

只不过你利用了一个中间变量

而我是直接判断
回复
没看到你有一个换行的
不错
回复
bhd1896 2008-12-04
汗,光看有什么用?
楼主自己知道看,老是说别人的不能用!再汗一下!
不和你争了,实践出真知!
回复
virgo2008 2008-12-04
汗 学习!藏,强人啊!
回复
你运行我14楼的程序,然后再看他9楼的说明

重说下问题:(可以把以下的"1,2,3”就是原题的"庄,闲,和")

有一ASP数组 arr(10) 值是[1,2,3,3,2,1,1,2,1,1]
要显示如下:
1
2,3,3,2
1,1
2
1,1
也就是说1可与3在一行,2可以3在一行,换言就是1与2不能在一行


这才是他的结果
回复
看过你的代码
但是从你的逻辑分析
肯定不符合他的效果要求
因为你的无法换行
一换行你得肯定乱了!

你运行我得程序,然后看他9楼得说明就知道了
回复
bhd1896 2008-12-04
chinmo
你的意思我写的不符合他的要求呢??
看我的代码没有??
回复
bhd1896

你的逻辑你自己随便弄几个数据测试就知道了

你看他9楼的说明,你就知道你的逻辑是否达到他的效果了
回复
汗!又隔了一楼
回复
bhd1896 2008-12-04
这里多了个response.Write f2 。

elseif arr(i)="闲" then
if ff="1" then
f2 = "<br>"&i+1&"="&arr(i)
else
f2 = i+1&"="&arr(i)
end if
response.Write f2
response.Write f2
ff = "2"
end if
回复
楼上的,你那个程序,你自己随便编一个数据试,看看你得逻辑是否和他要的结果一样
回复
smartcatiboy 2008-12-04
闲”与“和”及“庄”与“和”在一行显示


dim s_strBuffer
function write(strChr)
if (strChr="庄" and instr(s_strBuffer,"闲")) or _
(strChr="闲" and instr(s_strBuffer,"庄") then
response.write strBuffer & "<br>"
strBuffer=""
write strChr
else
s_strBuffer=s_strBuffer & strChr
end if
end function
回复
bhd1896 2008-12-04

<%

if request("mode")="" then
A1=20
A2=20
A3=8
else
A1=cint(request("T1")) : if A1=0 then A1=20
A2=cint(request("T2")) : if A2=0 then A2=20
A3=cint(request("T3")) : if A3=0 then A3=8

if 48-(A1+A2+A3) <0 then
A2=A3+(48-(A1+A2+A3))
end if
end if

dim arr(48),a,b,c
a=A1
b=A2
c=A3

for i1=0 to a+b+c-1
if i1<=a-1 then
arr(i1) ="庄"
elseif i1>a-1 and i1<=a+b-1 then
arr(i1)="闲"
else
arr(i1)="和"
end if
next

str=join(arr)
str=replace(str," ","")

arr_Rnd=GetRnd(1,(a+b+c)) '产生指定个数不重复的48个数

'显示
for i=0 to ubound(arr_rnd) ' a+b+c -1
ARR(i)=Mid(str,arr_rnd(i),1)
response.Write i+1 &"=" &ARR(i) & "|"
next

'分组显示:分组“闲”与“和”及“庄”与“和”在一行显示
response.Write("<hr color=red>分组显示:分组“闲”与“和”及“庄”与“和”在一行显示<br>")


for i=0 to a+b+c-1
if i=0 then
ff="0"
end if
if arr(i)="和" then
f0 = i+1&"=<font color=red>"&arr(i)&"</font>"
response.Write f0
elseif arr(i)="庄" then
if ff="2" then
f1 = "<br>"&i+1&"="&arr(i)
else
f1 = i+1&"="&arr(i)
end if
response.Write f1
ff = "1"
elseif arr(i)="闲" then
if ff="1" then
f2 = "<br>"&i+1&"="&arr(i)
else
f2 = i+1&"="&arr(i)
end if
response.Write f2
response.Write f2
ff = "2"
end if
next


'打乱48(不重的48RND),返回数组
'Rem no copy Number
Function GetRnd(lowerNum,upperNum)
Dim unit,RndNum,Fun_X
unit = upperNum - lowerNum
Redim MyArray(unit)
For Fun_I=0 To unit
myArray(Fun_I)= lowerNum + Fun_I
Next
For Fun_I=0 To round(unit)
RndNum = getRndNumber(Fun_I,unit)
Fun_X = myArray(RndNum)
myArray(RndNum)=myArray(Fun_I)
myArray(Fun_I)=Fun_X
Next
GetRnd = myArray
End Function

function getRndNumber(lowerbound,upperbound)
Randomize
getRndNumber=Int((upperbound-lowerbound+1)*Rnd+lowerbound)
end function
%>
回复
我改变一下程序,去掉最后一个逗号得问题:
<%arr=array(1,2,3,3,2,1,1,2,1,1) 
j=0
for i=0 to ubound(arr)
if i=0 then'i=0时说明是第一个参数,直接输出,不做任何判断
response.Write(arr(i))
else'否则执行下面的判断语句
if arr(i)=1 then '当前数组值如果等于1则执行下面判断和输出语句
if arr(i-1)<>2 then'如果当前数组值的前一个不等于2则不需要换行,否则换行
response.Write(","&arr(i) )
else
response.Write("<br>"&arr(i))
end if
elseif arr(i)=2 then'当前数组值如果等于2则执行下面判断和输出语句
if arr(i-1)<>1 then'如果当前数组值的前一个不等于1则不需要换行,否则换行
response.Write(","&arr(i) )
else
response.Write("<br>"&arr(i))
end if
elseif arr(i)=3 then'当前数值等于3时,不需要换行,直接输出
response.Write(","&arr(i))
end if
end if
next
%>
回复
loveinet_168 2008-12-04
学习。。
回复
我对程序稍微做一下解释吧:
<%arr=array(1,2,3,3,2,1,1,2,1,1) 
j=0
for i=0 to ubound(arr)
if i=0 then'i=0时说明是第一个参数,直接输出,不做任何判断
response.Write(arr(i)&"," )
else'否则执行下面的判断语句
if arr(i)=1 then '当前数组值如果等于1则执行下面判断和输出语句
if arr(i-1)<>2 then'如果当前数组值的前一个不等于2则不需要换行,否则换行
response.Write(arr(i)&"," )
else
response.Write("<br>"&arr(i)&"," )
end if
elseif arr(i)=2 then'当前数组值如果等于2则执行下面判断和输出语句
if arr(i-1)<>1 then'如果当前数组值的前一个不等于1则不需要换行,否则换行
response.Write(arr(i)&"," )
else
response.Write("<br>"&arr(i)&"," )
end if
elseif arr(i)=3 then'当前数值等于3时,不需要换行,直接输出
response.Write(arr(i)&"," )
end if
end if
next
%>
回复
其实题目很简单,如果你能把这中间的逻辑想清楚了,程序写起来一点都不难!

我上面给的程序,你运行一下就知道
回复
加载更多回复
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2008-12-03 04:58
社区公告
暂无公告