学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

怎样随机分考场

怎样随机分考场

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

TOP

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

TOP

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

TOP

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

终于自己写出来了.

TOP

回复 3# gongdian 的帖子

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

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

TOP

回复 3# gongdian 的帖子

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

TOP

用Random 和 ArrayList 会比较方便的
也许我没有明天,但是我拥有现在

TOP

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]);
}
混排数组的位置,再输出,也可以实现。

TOP

发新话题