請問用c#實現生成1-100不相同的隨機書咋實現?謝謝!

解决方案 »

  1.   

    Random r = new Random();
    int x = r.Next(1, 101);
      

  2.   

    int[] data=new int[100];for(int i=0;i<100;i++)
    {
        data[i]=i+1;
    }for(int i=0;i<100;i++)
    {
        int source=i
        int desc=ran.Next(0,100)//ran为实例化的随ji函数 Random    int tmp=data[source];
        source=data[desc];
        desc=tmp;
        
    }//这个就是传说中的跳蚤算法,据说还是一个美女发明的,呵呵,随手写的,没调试。
      

  3.   

    100个不同的随机数
    先在一个数组int[] a = new int[n],n>=100
    存入不重复的数,比如连续的书,然后随机产生两个数,交换数组中该两个位置上的值,重复交换x遍之后,数组中就可以认为是随机的一个序列,且不重复,取出即可使用
    int[] a = new int[100];
    for(int i=0; i<100; i++)
      a[i] = i;
    Random r = new Random();
    for(int i=0; i<200; i++)
    {
        int x = r.next(100);
        int y = r.next(100);
        int tmp = a[x];
        a[x] = a[y];
        a[y] = tmp;
    }此时数组a是一个无需随机数数组,且不重复
      

  4.   

    Random r = new Random();
    int x = r.Next(1, 101);
    这个是最简单的
      

  5.   

    Random r = new Random();
    int x = r.Next(1, 101);
    这个是简单
      

  6.   

    多谢楼上兄弟.听说可以用Random的种子实现此功能.不知道如何实现?
      

  7.   

    Random r = new Random();
    int x = r.Next(1, 101);
    是不能实现的,会有重复数据.
      

  8.   

    Random的种子只是保证你每次产生的随机数不同,没办法保证100个数是不重复的。
    要保证不重复有多种算法,一个是牺牲时间,一个是牺牲空间。我认为比较好的就是跳蚤算法了。就是我前面写的,先用循环产生数组,a[0]=1,a[1]=2,.....,a[99]=100.然后再打乱他们的顺序就行了。
      

  9.   

    arraylist tmp=new arraylist(100)
    for(int i=1;I<101;i++)
    {
     tmp[i]=i;
    }for (int i=1;i<101;i++)
    {
      int x=new random(0,tmp.length);
      console.writeline(tmp[x]);
      tmp.remove(x);
    }
      

  10.   

    int x=new random(0,tmp.length-1);呵呵
      

  11.   

    //这个没问题    
    Random ran = new Random();            int[] data=new int[100];            for(int i=0;i<100;i++)
                {
                    data[i]=i+1;
                }            for(int i=0;i<100;i++)
                {
                    int desc = ran.Next(0, 100);//ran为实例化的随ji函数 Random                int tmp=data[i];                data[i]=data[desc];
                    data[desc]=tmp;
                }
      

  12.   

    最原始的办法。
    就像洗牌一样,随机产生一位置,抽出一张牌,放到最后。重复1000次,再怎么样也乱七八糟了吧。
    using System;namespace ConsoleApplication1
    {

    class Class1
    {

    [STAThread]
    static void Main(string[] args)
    {
    int j,temp;
    int []by=new int[100];        //定义数组
    for(int i=0;i<100;i++)        //赋值
    by[i]=i+1;
    Random r=new Random();        ///////////随机混排一个数组//////
    for(int x=0;x<1000;x++)        //重复1000次
    {
    j=r.Next(0,100);        //随即产生一位置,让其左移。 temp=by[j];            
    for(int i=j;i<99;i++)
    by[i]=by[i+1];
    by[99]=temp;
    }    
                             
    Console.WriteLine();        ///////////显示输出///////////
    for(int i=0;i<100;i++)
    Console.Write(by[i]+","); Console.Read();//等停
     
    }
    }
    }
      

  13.   

    kyle315第二次写的算法没问题了
    我说为什么第一次的怎么也看不明白呢,哈