编程论坛's Archiver

gongdian 发表于 2008-5-12 16:45

怎样随机分考场

一个班级只能占有一个考场,这个可以写出来,可是每个班怎么能随机分配考场?请教一下思路。

kyln 发表于 2008-5-12 18:11

这是个无重复随机数产生的问题.
可以使用 Random r = new Random();
          a=  r.Next(40);
来产生小于40的随机数,可以把已经分配的班级的序号保存起来,每产生一个新随机数时看是否跟前面的重复,若重复就重新生成随机数大概就行了

gongdian 发表于 2008-5-13 18:18

小弟真是写不出来,请大家帮忙了。
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]);
                }
        }
}

gongdian 发表于 2008-5-17 13:05

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]);
                }
        }
}

终于自己写出来了.

落木萧萧 发表于 2008-6-4 11:14

回复 3# gongdian 的帖子

好象是这样,
试试看...

[[it] 本帖最后由 落木萧萧 于 2008-6-4 11:54 编辑 [/it]]

落木萧萧 发表于 2008-6-4 11:53

回复 3# gongdian 的帖子

不对啊,还是有重复数产生....

沉沦过迁 发表于 2008-6-4 16:19

用Random 和 ArrayList 会比较方便的

gongdian 发表于 2008-6-8 09:26

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]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.