在程式設計中經常遇到一些類似的問題,比如做乙個雙色球選號軟體,其中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實現...