亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

用C#生成不重復的隨機數的代碼

2020-01-24 03:36:16
字體:
來源:轉載
供稿:網友

對于隨機數,大家都知道,計算機不 可能產生完全隨機的數字,所謂的隨機數發生器都是通過一定的算法對事先選定的隨機種子做復雜的運算,用產生的結果來近似的模擬完全隨機數,這種隨機數被稱 作偽隨機數。偽隨機數是以相同的概率從一組有限的數字中選取的。所選數字并不具有完全的隨機性,但是從實用的角度而言,其隨機程度已足夠了。偽隨機數的選 擇是從隨機種子開始的,所以為了保證每次得到的偽隨機數都足夠地“隨機”,隨機種子的選擇就顯得非常重要。如果隨機種子一樣,那么同一個隨機數發生器產生 的隨機數也會一樣。一般地,我們使用同系統時間有關的參數作為隨機種子,這也是.net Framework中的隨機數發生器默認采用的方法。

  我們可以使用兩種方式初始化一個隨機數發生器:

第一種方法不指定隨機種子,系統自動選取當前時間作為隨機種子:

復制代碼 代碼如下:

Random ro = new Random();


第二種方法可以指定一個int型參數作為隨機種子:

復制代碼 代碼如下:

  int iSeed=10;
  Random ro = new Random(10);
  long tick = DateTime.Now.Ticks;
  Random ran = new Random((int)(tick & 0xffffffffL) | (int) (tick >> 32));


  這樣可以保證99%不是一樣。
  之后,我們就可以使用這個Random類的對象來產生隨機數,這時候要用到Random.Next()方法。這個方法使用相當靈活,你甚至可以指定產生的隨機數的上下限。

不指定上下限的使用如下:

復制代碼 代碼如下:

  int iResult;
  iResult=ro.Next();


下面的代碼指定返回小于100的隨機數:

復制代碼 代碼如下:

  int iResult;
  int iUp=100;
  iResult=ro.Next(iUp);


  而下面這段代碼則指定返回值必須在50-100的范圍之內:

復制代碼 代碼如下:

  int iResult;
  int iUp=100;
  int iDown=50;
  iResult=ro.Next(iDown,iUp);


  除了Random.Next()方法之外,Random類還提供了Random.NextDouble()方法產生一個范圍在0.0-1.0之間的隨機的雙精度浮點數:

復制代碼 代碼如下:

  double dResult;
  dResult=ro.NextDouble();


  但是用Random類生成題號,會出現重復,特別是在數量較小的題目中要生成不重復的的題目是很難的,參考了網上的一些方法,包括兩類,一類是通過隨機種子入手,使每一次的隨機種子不同,來保證不重復;第二類是使用一些數據結構和算法。下面主要就第二類介紹幾個方法。
   
    方法1:思想是用一個數組來保存索引號,先隨機生成一個數組位置,然后把這個位置的索引號取出來,并把最后一個索引號復制到當前的數組位置,然后使隨機 數的上限減一,具體如:先把這100個數放在一個數組內,每次隨機取一個位置(第一次是1-100,第二次是1-99,...),將該位置的數用最后的數 代替。
復制代碼 代碼如下:

int[] index = new int[15];
  for (int i = 0; i < 15; i++)
    index = i;
  Random r = new Random();
  //用來保存隨機生成的不重復的10個數
  int[] result = new int[10];
  int site = 15;//設置下限
  int id;
  for (int j = 0; j < 10; j++)
  {
    id = r.Next(1, site - 1);
    //在隨機位置取出一個數,保存到結果數組
    result[j] = index[id];
    //最后一個數復制到當前位置
    index[id] = index[site - 1];
    //位置的下限減少一
    site--;
  }

方法2:利用Hashtable。
復制代碼 代碼如下:

Hashtable hashtable = new Hashtable();
  Random rm = new Random();
  int RmNum = 10;
  for (int i = 0; hashtable.Count < RmNum; i++)
  {
      int nValue = rm.Next(100);
      if (!hashtable.ContainsValue(nValue) && nValue != 0)
      {
       hashtable.Add(nValue, nValue);
       Console.WriteLine(nValue.ToString());
      }
  }

方法3:遞歸,用它來檢測生成的隨機數是否有重復,如果取出來的數字和已取得的數字有重復就重新隨機獲取。
復制代碼 代碼如下:

Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
  int[] arrNum=new int[10];
  int tmp=0;
  int minValue=1;
  int maxValue=10;
  for (int i=0;i<10;i++)
  {
    tmp=ra.Next(minValue,maxValue); //隨機取數
    arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值賦到數組中
  }
  .........
  .........
  public int getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra)
  {
    int n=0;
    while (n<=arrNum.Length-1)
    {
      if (arrNum[n]==tmp) //利用循環判斷是否有重復
      {
        tmp=ra.Next(minValue,maxValue); //重新隨機獲取。
        getNum(arrNum,tmp,minValue,maxValue,ra);//遞歸:如果取出來的數字和已取得的數字有重復就重新隨機獲取。
      }
    n++;
    }
    return tmp;
  }


附----:
在.net Framework中提供了一個專門用來產生隨機數的類System.Random。
計算機本身不可能產生完全隨機的數字,所謂的隨機數發生器都是通過一定的算法對事先選定的隨機種子做復雜的運算,用產生的結果來近似的模擬完全隨機數,這種隨機數被稱 作偽隨機數。
偽隨機數是以相同的概率從一組有限的數字中選取的。

所選數字并不具有完全的隨機性,但是從實用的角度而言,其隨機程度已足夠了。偽隨機數的選擇是從隨機種子開始的,所以為了保證每次得到的偽隨機數都足夠地“隨機”,隨機種子的選擇就顯得非常重要。如果隨機種子一樣,那么同一個隨機數發生器產生 的隨機數也會一樣。一般地,我們使用同系統時間有關的參數作為隨機種子,這也是.net Framework中的隨機數發生器默認采用的方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美有码在线观看视频| 91久久在线观看| 精品视频久久久久久久| 91在线观看免费高清完整版在线观看| 久久成年人视频| 正在播放欧美一区| 亚洲精品一区av在线播放| 久久久精品国产网站| 韩曰欧美视频免费观看| 亚洲美女免费精品视频在线观看| 亚洲欧美日韩中文在线制服| 亚洲免费影视第一页| 亚洲欧美视频在线| 欧美巨大黑人极品精男| 欧美成人精品在线视频| 欧美一级免费视频| 色悠久久久久综合先锋影音下载| 日韩成人在线视频网站| 亚洲性线免费观看视频成熟| 成人免费高清完整版在线观看| 国产在线不卡精品| 欧美日韩一区二区在线| 久久久久久久久久久久久久久久久久av| 国产ts人妖一区二区三区| 国产精品丝袜一区二区三区| 久久91精品国产| 日韩网站免费观看高清| zzjj国产精品一区二区| 国产精品扒开腿做爽爽爽视频| 日韩电影在线观看永久视频免费网站| 欧美日韩中文在线| 亚洲伊人久久综合| 97人洗澡人人免费公开视频碰碰碰| 中文字幕精品网| 一区二区中文字幕| 日韩国产精品亚洲а∨天堂免| 国产精品美女www| 国产精品狼人色视频一区| 日韩av电影手机在线| 久久成年人视频| 555www成人网| 98精品国产高清在线xxxx天堂| 色综合久久久888| 成人免费大片黄在线播放| 国产精品视频xxx| 91久久久在线| 麻豆精品精华液| 欧美激情videoshd| 欧美疯狂做受xxxx高潮| 午夜美女久久久久爽久久| 黑人精品xxx一区| 91久久久久久久久久久| 精品色蜜蜜精品视频在线观看| 色偷偷亚洲男人天堂| 欧美日韩综合视频| 色综合久久88| 亚洲xxxx做受欧美| 久久亚洲精品中文字幕冲田杏梨| 中文字幕av一区中文字幕天堂| 亚洲自拍偷拍色图| 国产v综合v亚洲欧美久久| 色中色综合影院手机版在线观看| 日韩欧美国产一区二区| 国产精品黄视频| 永久555www成人免费| 日本久久精品视频| 国产+成+人+亚洲欧洲| 欧美日韩国产中文字幕| 欧美极品少妇xxxxⅹ免费视频| 欧美激情一级欧美精品| 亚洲欧美制服中文字幕| 国内伊人久久久久久网站视频| 亚洲一级片在线看| 亚洲激情在线观看视频免费| 91av免费观看91av精品在线| 成人激情视频在线播放| 久久国产精彩视频| 姬川优奈aav一区二区| 日韩大陆欧美高清视频区| 久久精品免费播放| 久久久久久久国产精品| 亚洲成人免费在线视频| 欧美黑人巨大精品一区二区| 91亚洲人电影| 亚洲视频电影图片偷拍一区| 国产精品爽黄69天堂a| 成人在线免费观看视视频| 欧美一级免费看| 久久中文字幕在线| 孩xxxx性bbbb欧美| 欧美日韩在线一区| 亚洲精品电影网| 亚洲新中文字幕| 欧美日韩激情小视频| 国产成人综合亚洲| 国产精品久久久久福利| 欧美人成在线视频| 538国产精品一区二区免费视频| 青草青草久热精品视频在线网站| 亚洲国产精品成人va在线观看| 久久精品久久久久久国产 免费| 久热精品视频在线免费观看| 国产精品九九九| 国产一区欧美二区三区| 岛国av一区二区| 亚洲国产成人精品久久| 久久国产精品电影| 操人视频在线观看欧美| 久久久久久91| 日韩在线播放一区| 国产91对白在线播放| 欧美色图在线视频| 欧美大片在线影院| 精品激情国产视频| 亚洲电影免费在线观看| 久久久久久久久久久av| 国产精品综合久久久| 久久精品99无色码中文字幕| 亚洲欧美一区二区三区情侣bbw| 亚洲欧美日韩另类| 91影视免费在线观看| 97成人在线视频| 亚洲免费视频观看| 亚洲人成网站999久久久综合| 欧美午夜女人视频在线| 欧美精品激情blacked18| 日韩视频在线一区| 亚洲欧美福利视频| 亚洲美女福利视频网站| 欧美在线免费看| 国产一区玩具在线观看| 亚洲男人天堂古典| 久久精品欧美视频| 亚洲视频免费一区| 久久久久国产精品www| 美女视频黄免费的亚洲男人天堂| 久久国产精彩视频| 日韩亚洲一区二区| 国产中文字幕亚洲| 91色p视频在线| 另类色图亚洲色图| 国产黑人绿帽在线第一区| 57pao精品| 亚洲男人av在线| 国产成人精品日本亚洲| 国产精品永久免费视频| 91社区国产高清| 久久久av电影| 国产一区二区三区18| 色综合伊人色综合网站| 亚洲人在线观看| 国产又爽又黄的激情精品视频| 亚洲高清久久久久久| 午夜精品一区二区三区在线视| 日韩三级成人av网| 在线看日韩欧美| 欧美日韩国产精品专区| 久久人人爽人人| 久久免费视频网站| 亚洲视频在线观看| 91沈先生在线观看| 国产美女高潮久久白浆| 日韩精品在线播放| 九九九久久久久久|