เมื่อสองวันก่อน ผมเห็นมีคนต้องการรวบรวมระบบการสอบ ตอนนั้นผมเพิ่งใช้ฟังก์ชันสุ่ม RND สั้นๆ
ในทางปฏิบัติ โดยทั่วไปจำเป็นต้องสุ่มแยกคำถาม N คำถามออกจากฐานข้อมูล
รหัสต่อไปนี้ทั้งหมดใช้ VBS
ปกติจะเขียนแบบนี้ครับ
'สร้างตัวเลขสุ่มแบบไม่ซ้ำกัน' ฟังก์ชั่น rndarray (istart, iend, sum) arrayid สลัว (), i, j, blnre, อุณหภูมิ, iloop, eloop Redim arrayid (ผลรวม-1) ผม=0 ไอลูป=0 อีลูป=0 blnre=เท็จ สุ่ม ทำในขณะที่ฉัน<sum อุณหภูมิ=int(rnd*(iend-istart+1)+istart) ถ้า i=0 แล้ว arrayid(0)=อุณหภูมิ ฉัน=ฉัน+1 iloop=iloop+1 อื่น สำหรับ j=0 ถึง i-1 ถ้า arrayid(j)=temp แล้ว blnre=จริง iloop=iloop+1 ประโยค "exit for'" มีความสำคัญมากในการป้องกันการวนซ้ำซ้ำซ้อน อื่น iloop=iloop+1 สิ้นสุดถ้า ต่อไป ถ้า blnre=false แล้ว arrayid(i)=อุณหภูมิ ฉัน=ฉัน+1 อื่น blnre=เท็จ สิ้นสุดถ้า สิ้นสุดถ้า eloop=eloop+iloop ไอลูป=0 วนซ้ำ rndarray=join(arrayid)&จำนวนลูป:&eloop ฟังก์ชั่นสิ้นสุด response.write rndarray(1,10,5)&<br>'กระบวนการเรียก |
ป.ล. iloop และ eloop ใช้สำหรับคำนวณจำนวนลูปเท่านั้น
ข้างต้น คนส่วนใหญ่ใช้วิธีนี้ในการเขียน สร้างตัวเลขสุ่ม แล้วเปรียบเทียบกับตัวเลขที่สร้างขึ้นก่อนหน้านี้เพื่อดูว่าสามารถใช้งานได้หรือไม่
แต่นี่ไม่ใช่ AI หรือวิธีที่มีประสิทธิภาพ ทำไมไม่ใช้สองอาร์เรย์ล่ะ
อาร์เรย์ 1 เก็บสตริง ตัวเลข ฯลฯ ที่ต้องการ และอาร์เรย์ 2 เก็บตัวเลขสุ่มที่สร้างขึ้น เมื่อตัวห้อย x ของอุณหภูมิตัวแปรระดับกลางถูกสร้างแบบสุ่มในแต่ละครั้ง จะมีการกำหนดให้กับอาร์เรย์ 2 จากนั้นตัวห้อยจะถูกลบออกจาก อาร์เรย์ 1 เป็นจำนวนที่แยกออกจากอาร์เรย์ 1
วิธีที่สอง
ฟังก์ชั่น rndstr (istart, iend, isum) สลัว i,j,vntarray() redim vntarray (iend-istart) เจ=เริ่มต้น สำหรับ i=0 ถึง iend-istart vntarray(i)=j เจ=เจ+1 ต่อไป vntarray2(),อุณหภูมิ,x,y สลัว ทำซ้ำ vntarray2 (isum-1) y=iend-istart+1 x=0 อุณหภูมิ=vntarray ทำในขณะที่ x<isum สลัว สุ่ม vntarray2(x)=temp(int(rnd*y)) a= &vntarray2(x)& temp=split(ตัดแต่ง(แทนที่(chr(32)&join(temp)&chr(32),a, ))) x=x+1 y=y-1 วนซ้ำ rndstr=เข้าร่วม(vntarray2) ฟังก์ชั่นสิ้นสุด การตอบสนองเขียน rndstr (1,5,2) |
วิธีนี้จะไม่ง่ายกว่านี้เหรอ?
หากต้องการขยายอีกเล็กน้อย หากคุณต้องการสร้างสตริงสุ่มที่มีตัวอักษรและตัวเลข คุณเพียงแค่ต้องกำหนดค่าให้กับอาร์เรย์ 1 และใช้ฟังก์ชัน chr(num);
สมมุติว่าต้องทำโปรแกรมหน้าหวยมือถือ
ขั้นแรกกำหนดค่าให้กับอาร์เรย์ 1 ซึ่งสามารถกำหนดแบบวนรอบได้ตั้งแต่ 130.... ถึง 139.... แน่นอนว่าในการใช้งานจริง ค่าที่มีอยู่จะถูกกำหนดค่าจากฐานข้อมูล จากนั้นจึงสุ่มแยกและกำหนดให้กับอาร์เรย์ 2 ;
สุดท้ายก็ขัดอีกหน่อย
temp=แทนที่(เข้าร่วม(array2),chr(32),) |
โทรศัพท์=ซ้าย(อุณหภูมิ,6)&***&ขวา(อุณหภูมิ,2)
ได้ผลลัพธ์ประมาณ 137648***58 ครับ 555
ฉันเหนื่อยกับการเขียนมาก~~