이틀 전 누군가가 시험 시스템을 컴파일하고 싶어하는 것을 보았습니다. 그 당시에는 RND라는 무작위 함수를 간단히 사용했습니다.
실제로는 일반적으로 데이터베이스에서 N개의 질문을 무작위로 추출해야 합니다.
다음 코드는 모두 VBS를 기반으로 합니다.
보통 이렇게 써요
'반복되지 않는 난수 생성 함수 rndarray(istart,iend,sum) 희미한 arrayid(),i,j,blnre,temp,iloop,eloop redim 배열 ID(sum-1) 나는=0 아이루프=0 eloop=0 blnre=거짓 무작위화하다 내가 하는 동안 <sum temp=int(rnd*(iend-istart+1)+start) i=0이면 배열ID(0)=임시 나=나+1 iloop=iloop+1 또 다른 j=0에서 i-1까지 arrayid(j)=temp이면 blnre=true iloop=iloop+1 "exit for"라는 문장은 중복 루프를 방지하는 데 매우 중요합니다. 또 다른 iloop=iloop+1 종료하면 다음 blnre=false이면 배열ID(i)=임시 나=나+1 또 다른 blnre=거짓 종료하면 종료하면 eloop=eloop+iloop 아이루프=0 고리 rndarray=join(arrayid)&루프 수:&eloop 종료 기능 response.write rndarray(1,10,5)&<br>'호출 프로세스 |
추신. iloop와 eloop는 루프 수를 계산하기 위한 것입니다.
위에서 대부분의 사람들은 이 방법을 사용하여 난수를 쓰고 생성한 다음 이전에 생성된 것과 비교하여 사용 가능한지 여부를 결정합니다.
하지만 이는 AI나 효율적인 방법이 아닙니다. 두 개의 배열을 사용하는 것은 어떨까요?
배열 1은 필요한 문자열, 숫자 등을 저장하고 배열 2는 생성된 난수를 저장합니다. 중간 변수 temp의 첨자 x가 매번 무작위로 생성되면 배열 2에 할당된 다음 첨자가 제거됩니다. 배열 1은 배열 1에서 추출된 개수입니다.
방법 2
함수 rndstr(istart,iend,isum) 희미한 i,j,vntarray() redim vntarray(iend-istart) j=시작 i=0에서 iend-istart까지 vntarray(i)=j j=j+1 다음 희미한 vntarray2(),temp,x,y Redim vntarray2(isum-1) y=iend-istart+1 x=0 임시=vntarray x<isum 동안 수행 어둡게 하다 무작위화하다 vntarray2(x)=임시(int(rnd*y)) a= &vntarray2(x)& temp=split(trim(replace(chr(32)&join(temp)&chr(32),a, ))) x=x+1 y=y-1 고리 rndstr=결합(vntarray2) 종료 기능 response.write rndstr(1,5,2) |
이렇게 하면 더 간단하지 않을까요?
비트를 확장하려면 문자와 숫자가 포함된 임의의 문자열을 생성하려면 배열 1에 값을 할당하고 chr(num) 함수를 사용하면 됩니다.
모바일 복권 당첨 페이지 프로그램을 만들어야 한다고 가정해 보겠습니다.
먼저 배열 1에 값을 할당합니다. 이는 130....부터 139....까지 순환적으로 할당할 수 있습니다. 물론 실제 사용에서는 기존 값을 데이터베이스에서 할당한 후 무작위로 추출하여 배열 2에 할당합니다. ;
마지막으로 좀 더 다듬어 보겠습니다.
임시=교체(조인(array2),chr(32),) |
전화=왼쪽(온도,6)&***&오른쪽(온도,2)
137648***58과 유사한 결과를 얻으세요, 하하
글을 너무 많이 쓰다보니 지쳤네요~~