1樓:匿名使用者
其實並不是在每取完十個元素後再考慮不會重複抽取的問題,而是要在每取完乙個元素後就要考慮在下一次抽取中會不會再次抽到上一次已經被選中過的元素。
推薦通過交換法將抽到的元素與容器後幾個元素交換位置,在接下來的抽取中逐漸縮小範圍(排除那後幾個元素),就不會重複抽取了。還有一種效率不高但便於理解的方法,就是每次將選中的元素從容器中刪除(但不適用於容器為陣列的情況)。
// 定義兩個全域性變數(當然封裝成乙個能隨機提供元素的容器類會更好)int allelem[100] = ...
int bound = 100; // 可供選擇的下標範圍int get_one(void) // 沒有針對容器元素取盡等情況進行錯誤判斷處理
// 在其它地方呼叫上面的函式
for (int i=0; i<10; ++i)// 再抽取十個元素
for (int j=0; j<10; ++j)// 再再抽取十個元素
for (int k=0; k<10; ++k)
2樓:紀採鎮苑博
正常,rand()的結果是隨機的,所以完全有可能重複啊。
就像丟色子一樣,前後完全有可能重複。
要想沒有重複的,只能自己手動去重(比如發現跟前面重複了,就丟棄,重新生成)
3樓:堵耘汗雨竹
是這樣的,c++裡的隨機數是由乙個種子按照固定的演算法生成的隨機數的序列,如果種子不變,那麼隨機數序列不變,你每次執行都是取到同乙個隨機數序列的第乙個隨機數,所以結果一樣。
你可以使用srand(time(null));放在你的隨機數函式前面,這句的意思是利用系統時間來作為種子,即種子是會改變的,那麼每次的結果也就不一樣了。
4樓:澄曦嘉子惠
1.0可以省略;
rand函式產生的隨機數不是真正的隨機數,rand函式其實是通過乙個演算法實現的,只要給出初值,再用過那個演算法生成的;
用srand(
(unsigned)time(
null
))或srand(
(unsigned)time(
0)來給出隨機數的種子,就是用系統時間作為rand的初值(系統時間每時每刻都變,可看作隨機數),用srand函式要包括在#include
標頭檔案中
5樓:浮情犁平卉
可以用srand()來設定
隨機數的種子,否則你每次執行程式將得到同樣的隨機數序列,也就是說rand()函式產生的是
偽隨機數
。1.0當然可以省略,rand()函式產生的是0到rand_max之間的隨機數。
srand(
(unsigned)time(
null));
這樣來初始化一下,就可以用了
6樓:
直接隨機全部打亂順序,然後10個10個讀取就行了
7樓:匿名使用者
你說的應該是隨機抽取10個數吧。
如果能保證隨機抽取的數不會在下一次不會再被抽取到,就可以實現你的要求。
int elements[100] = ;
int es[10];
int n = 100;
int idx;
srand((unsigned)time(0));
for(int i=0; i<10; i++)下一次取的時候n從90開始。而上次取的10個數,如果不是索引在90以上就是被索引在90以上的元素覆蓋了,所以都不會再被取到。
EXCEL隨機數公式,求excel隨機函式公式。
excel隨機數函式 隨機數當然也包括0 比如01 0039 這個要看你的數值範圍啊 如果沒要求,text rand 1000000,00 0000 只有分開設 text 1000000 rand 00 0000 那你用兩列,分別列入你要的三位數和四位數,再用concatenate公式合併不就可以了...
c怎麼獲取隨機數C怎麼獲取隨機數
在開發過程中,常常要產生隨機數,如生成靜態 html 網頁時,檔名通常用產生隨機數的方式獲得,生成定單的時候,定單號也可以用產生隨機數的方式獲得等。在 c 中,一般都用 random 產生隨機數,它可任意指定產生隨機數範圍。random 結合陣列,可以產生一些特殊範圍的隨機數,以滿足特殊的需要。一 ...
vb利用隨機函式rnd生成,VB利用隨機函式Rnd生成10個10 99的整數,並計算其中的素數個數。(求大神看看哪裡錯了?)
1 首先bai,我們 給主函式du先定乙個函式。2 然zhi後dao我們編寫 版for迴圈語句。3 然後我們編寫輸權出語句及範圍。4 然後我們開始執行測試。5 這句警告沒關係,如果不想看到可以新增呼叫數學函式。6 這時我們便可以看到效果了。我給你優化了一下,由於最大99,所以只需要判斷到9就可以了,...