怎样随机分考场
一个班级只能占有一个考场,这个可以写出来,可是每个班怎么能随机分配考场?请教一下思路。 这是个无重复随机数产生的问题.可以使用 Random r = new Random();
a= r.Next(40);
来产生小于40的随机数,可以把已经分配的班级的序号保存起来,每产生一个新随机数时看是否跟前面的重复,若重复就重新生成随机数大概就行了 小弟真是写不出来,请大家帮忙了。
class A
{
static void Main()
{
Random free=new Random();
int a=free.Next(1,20);
int[] number=new int[20];
for(int j=0;j<20;j++)
{
number[j]=a;
a=free.Next(1,20);
}
for(int i=0;i<20;i++)
{
for(int j=1;j<20;j++)
{
if(number[i]==number[j])//如果前后两个数相等
{
a=free.Next(1,20);//就生成一个新数
if(a!=number[i])//生成的数不是前面的数就赋值
{
number[j]=a;
break;
}
}
else
{
break;
}
}
}
for(int i=0;i<20;i++)
{
Console.WriteLine(number[i]);
}
}
} using System;
class A
{
static void Main()
{
Random free=new Random();
int a=free.Next(1,15);
int change;
int[] number={16,2,13,4,18,20,7,12,9,17,11,8,3,14,15,1,10,5,19,6};
for(int j=0;j<100;j++) //混排
{
if(a<=4)
{
a=free.Next(0,3);
}
if(a>=5 && a<=8)
{
a=free.Next(4,7);
}
if(a>9 && a<13)
{
a=free.Next(8,11);
}
if(a>=14 && a<=18)
{
a=free.Next(12,15);
}
change=number[a];
number[a]=number[a+4];
number[a+4]=change;
a=free.Next(0,18);
}
for(int i=0;i<20;i++)
{
Console.WriteLine("{0}班,在第{1}考场",i+1,number[i]);
}
}
}
终于自己写出来了.
回复 3# gongdian 的帖子
好象是这样,试试看...
[[it] 本帖最后由 落木萧萧 于 2008-6-4 11:54 编辑 [/it]]
回复 3# gongdian 的帖子
不对啊,还是有重复数产生.... 用Random 和 ArrayList 会比较方便的 Random free=new Random();int a=free.Next(10);
int change;
int[] number1={1,2,3,4,5,6,7,8,9,10,11,12,13};
for(int j=0;j<50;j++)
{
change=number1[a];
number1[a]=number1[a+3];
number1[a+3]=change;
a=free.Next(10);
}
for(int j=0;i<13;i++)
{
Console.WriteLine(number[i]);
}
混排数组的位置,再输出,也可以实现。
页:
[1]
