如何產生1 100之間的100個不重複的隨機數

2022-04-13 02:58:04 字數 2130 閱讀 1904

如何產生1-100

之間的100個不重複的隨機數

如果這是你是第一次看到這個題目,也許你的想法有很多。

1:首先從原始陣列中隨機選擇乙個數字,然後將該數字從陣列中剔除,再隨記選,再剔除,重複99次,就解決了。

我們知道從陣列中剔除乙個元素的複雜度為o(n),那麼隨機選取n個數字,它的複雜度就是o(n2)了。

2:用hash作為中間過濾層,因為在陣列中,我們採用隨機數的話,也許隨機數在多次隨機中可能會有重複,所以需要用hash來判斷一下,

如果在hash中重複,則繼續產生隨機數,直到不重複為止,當然這個複雜度就不好說了,得要看隨機數隨機不隨機了,好的話,o(n)搞定,

不走運的話無上限~

可以對應到的就是「洗撲克牌」,在演算法中也叫「洗牌原理」,我們知道洗撲克牌的方式就是隨機的交換撲克牌的位置,又叫做"切牌",當你切了

很多次後,我們的撲克牌就可以認為是足夠亂了,複雜度也就變成了o(n),用**實現就是這樣的。

<1> 先有序的生成52張牌,然後有序的放到陣列中。

<2>從1-52中隨機的產生乙個數,然後將當前次數的位置跟隨機數的位置進行交換,重複52次,我們的牌就可以認為足夠亂了。

4:**實現

<1> 首先定義牌的資料結構,定義乙個「花色」和「數字」

1         /// 2         ///具體撲克牌

3 ///

4 public classcard

5

<2>有序的生成52張牌

1         /// 2         ///開牌

3 ///

4 public voidnewcard()

5 21

22 card[i - 1] = newcard()

23 ;

27 }

28 }

<3> 然後就是切牌了,剛才也說了思路,就是拿隨機數的位置與當前i的位置進行交換,不過一說到交換就想起了「氣泡排序」,可能被毒害太

深了(┬_┬),不知道你感覺到了沒。

1         /// 2         ///洗牌

3 ///

4 public voidshuffle()

5 19 }

<4> 最後我們看看效果

1 usingsystem;

2 usingsystem.collections.generic;

3 usingsystem.linq;

4 usingsystem.text;

5 usingsystem.threading.tasks;

6 8

27 }

28 29 public classcardclass

30 42

43 /// 44 ///開牌

45 ///

46 public voidnewcard()

47 63

64 card[i - 1] = newcard()

65 ;

69 }

70 }

71 72 /// 73 ///洗牌

74 ///

75 public voidshuffle()

76 {

77 for (int i = 0; i < card.length; i++)

78 {

79 var rand = new random((int)datetime.now.ticks).next(0, card.length);

80 81 //因為隨機數是偽隨記,正真的隨機數是要跟硬體打交道的,所以這裡設定了停留1ms

82 system.threading.thread.sleep(1);

83 84 var temp =

如何產生1 100 之間的100個不重複的隨機數

1 首先從原始陣列中隨機選擇乙個數字,然後將該數字從陣列中剔除,再隨記選,再剔除,重複99次,就解決了。我們知道從陣列中剔除乙個元素的複雜度為o n 那麼隨機選取n個數字,它的複雜度就是o n2 了。2 用hash作為中間過濾層,因為在陣列中,我們採用隨機數的話,也許隨機數在多次隨機中可能會有重複,...

輸出1 100之間的素數

思路 取出1 100,寫乙個布林型別的的方法判斷是不是素數,是素數就輸出。判斷是不是素數的方法是 如果是 1直接返回 false,不是1 時,先得到該數的 2次方根,從 2開始遍歷直到該數的 2次根。如果取到的數能把 2到該數的 2次方根之間的數除盡,就不是素數,除不盡就是。能被2除盡的就不是質數。...

1 100之間 7 的倍數的個數,並列印

7的倍數 x 7 0 偶數的話 x 2 0 1 package com.ibeve.demo 23 4 2.1 100之間 7 的倍數的個數,並列印 5 思路 6 1.先對 1 100進行迴圈 遍歷 通過迴圈的形式 7 2.在遍歷的過程中,定義條件,只對7的倍數進行操作 8 3.因為 7 的倍數不確...