實現原理:
方法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 ...