一種生成不重複數的演算法

2021-09-04 19:27:17 字數 1554 閱讀 4728

在程式設計中經常遇到一些類似的問題,比如做乙個雙色球選號軟體,其中6個雙色球是從1到33之間選出6個數來,這6個數是不能重複的,這個問題就是我們今天要說的生成不重複數演算法。

演算法描述如下:從m個數中選出n個數來(0下面要介紹的演算法是,每次隨機取出乙個數,之後將該數放置到集合的末尾去,這樣下次取隨機數的時候,只從1到目標集合個數-1個中隨機抽取,如此迴圈,這樣就避免了判斷在結果集合中判斷是否存在相衝突的數的過程。

演算法**如下:

using

system;

using

system.collections.generic;

using

system.text;

using

system.diagnostics;

using

system.management;

namespace

class

program

int result 

=createnumbers(range, 6);

for(

inti=0

;i<

result.length;i++)

]=", i, result[i]);

}console.readkey();}//

取出不重複的6個數

static

int createnumbers(

int range, 

intcount)

return

result;}}

} 結果如下:

補充一下,另外一種不使用陣列而使用可變集合的辦法,這種演算法的做法是使用了之後馬上從源集合中清除掉(陣列是

沒有辦法這麼做的),因而也是可以做到生成不重複的隨機數的。具體**如下:

//取出不重複的6個數

static

list

<

int>

createnumbers(list

<

int>

range, 

intcount)

return

result;}

至於用法,也很簡單:

list

<

int>

range 

=new

list

<

int>(33

);for

(inti =

0; i 

<

33; i++)

//初始化範圍集合,從1到33

list

<

int>

result 

=createnumbers(range, 6);

for(

inti =0

; i 

<

result.count; i++)

]=", i, result[i]);}

經萬次測試,使用陣列方法效能比使用list范型集合高1/4。

一種生成不重複數的演算法

在程式設計中經常遇到一些類似的問題,比如做乙個雙色球選號軟體,其中6個雙色球是從1到33之間選出6個數來,這6個數是不能重複的,這個問題就是我們今天要說的生成不重複數演算法。演算法描述如下 從m個數中選出n個數來 0下面要介紹的演算法是,每次隨機取出乙個數,之後將該數放置到集合的末尾去,這樣下次取隨...

一種生成不重複數的演算法

在程式設計中經常遇到一些類似的問題,比如做乙個雙色球選號軟體,其中6個雙色球是從1到33之間選出6個數來,這6個數是不能重複的,這個問題就是我們今天要說的生成不重複數演算法。演算法描述如下 從m個數中選出n個數來 0下面要介紹的演算法是,每次隨機取出乙個數,之後將該數放置到集合的末尾去,這樣下次取隨...

演算法 隨機不重複數列生成

今天上班的時候網上看到題目很簡單,題目是這樣的 給定乙個正整數n,需要輸出乙個長度為n的陣列,陣列元素是隨機數,範圍為0 n 1,且元素不能重複。比如 n 3 時,需要獲取乙個長度為3的陣列,元素範圍為0 2 簡單的理解就是生成乙個無序的隨機數組,在路上想了一下回來用三種方式方式實現了一下 oc實現...