在一个红绿灯测试试验中,当绿灯过了出现黄灯的时候,开始随机出现一个时间,车在这个规定的时间内行驶得分,一旦超过这个时间,红灯出现,以前的积分都处为0,否则本次积分累计到总分。一个人十次测验,每次使用的行驶距离即为刚才出现的10个数中的一个(当然这个行驶距离是看不见的),分数最大的取胜。
算法的关键是产生十个不同的随机数,并分10次随机取出这10个随机数(10个随机数固定下来以后,每位测试者都使用这十位,但这十个数字出现的次序不能相同) 。
需要注意的是,如果从1-10之间来随机产生10个不同的数字是非常困难的,往往等好长时间不能得到结果,所以要随机数范围,将整数部分减去,留下个位数部分的做法比较快。
产生10个不同的随机数AS脚本如下:
var inttemp=0;
int_array=new Array(10);
int_array[1]=Math.round(Math.random()*80+20);
var count=1;
var flags=0;
do{
inttemp=Math.round(Math.random()*80+20);
for(i=1;i<=count;i++)
{
if(int_array[i]==inttemp)
{
flags=1;//标示是否发现重复数字,如发现跳出
break;
}
}
if(flags==0)//没有发现重复数字,则记录下来
{
count=count+1;
int_array[count]=inttemp;
}
flags=0;
}while(count<=10)
随机出去这十个随机数的AS代码如下:
首先随机获取不同的小标,使用这些下标标识不同的数字即可
var k=0;
var flag;
data1=new Array(10); //负责记录十个不同的下表,并在下面输出
data1[1]=Math.round(Math.random()*9+1);
tot=1;//负责记录循环总数
var flag=0;
do{
gen_data=Math.round(Math.random()*19+1);//主要为防止小范围随机出现同一数的大概率时间发生
if(gen_data>10)
gen_data=gen_data-10;//求余也可
for(tt=1;tt<=tot;tt++)
{
if(gen_data==data1[tt])
{
flag=1;
break;
}
}
if(flag==0)
{
tot=tot+1;
data1[tot]=gen_data;
}
flag=0;
}while(tot<10);
out1_txt=int_array[data1[1]];
out2_txt=int_array[data1[2]];
out3_txt=int_array[data1[3]];
out4_txt=int_array[data1[4]];
out5_txt=int_array[data1[5]];
out6_txt=int_array[data1[6]];
out7_txt=int_array[data1[7]];
out8_txt=int_array[data1[8]];
out9_txt=int_array[data1[9]];
out10_txt=int_array[data1[10]];
stop();