生成一定範圍內的互不相同的隨機數的方法比較

2021-06-20 22:18:33 字數 1682 閱讀 9656

實現原理:

方法1:使用list,通過list.contains()作為迴圈判斷的條件,實現無重複的add

方法2:使用兩組陣列,all儲存所有可取值,result儲存結果,result依次從all中取值,all長度遞減,通過索引實現all中始終保持取完後剩下的元素

分析:法1在最壞情況下會重複迴圈,法2通過保證每次都能取到值,很大程度上提高了效率

**比較:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.diagnostics;

namespace

基本語法 "

, i);

++ctrl;

if (ctrl % 20 == 0

) console.writeline();

}console.writeline(

"\nmethod 1 time used:

", watch.elapsed);

watch.reset();

watch.start();

int ia = getrandom(20, 500, 400

); watch.stop();

ctrl = 0

;

foreach (int i in

ia)

", i);

++ctrl;

if (ctrl % 20 == 0

) console.writeline();

}console.writeline(

"\nmethod 2 time used:

", watch.elapsed);

}//////

使用list容器產生一定範圍內互不相同的隨機數

/// ///

最小值 ///

最大值 ///

隨機數總數

///返回list

static list _getrandom(int minval, int maxval, int

amount)

return

list;

}//////

使用陣列方法實現

/// ///

//////

///返回int

static

int getrandom(int minval, int maxval, int

amout)

random random = new

random();

int allnum =all.length;

for (int ix = 0; ix != amout;++ix )

return

result;}}

}

執行結果:

方法1在很多情況下耗時根本無法接受。。。

生成一定範圍內的互不相同的隨機數的方法比較

實現原理 方法1 使用list,通過list.contains 作為迴圈判斷的條件,實現無重複的add 方法2 使用兩組陣列,all儲存所有可取值,result儲存結果,result依次從all中取值,all長度遞減,通過索引實現all中始終保持取完後剩下的元素 分析 法1在最壞情況下會重複迴圈,法...

在一定範圍內生成隨機數

問題 給定乙個最小正整數和乙個最大正整數,如何在它們之間生成隨機數 包含上下界 1 它生成的隨機數範圍是 0,2 它所使用數值的型別是uint32,並不是int,因此需要做型別轉換。因為使用arc4random uniform 函式生成的隨機數不包含上界,但是我們的題目要求包含上界,所以在上下界相減...

生成互不相同隨機數的一種演算法

c 中常用rand 和srand 函式相結合來生成每次執行都不相同的一組隨機數,常見的寫法如下 cpp view plain copy include include include include using namespace std int tmain int argc,tchar argv ...