C++編寫生成不重復(fù)的隨機(jī)數(shù)代碼
C++編寫生成不重復(fù)的隨機(jī)數(shù)代碼
vector<int> getRandom(int total) { srand((int)time(NULL)); std::vector<int> input = *new std::vector<int>(); for (int i = 0; i < total; i++) { input.push_back(i); } vector<int> output = *new vector<int>(); int end = total; for (int i = 0; i < total; i++) { vector<int>::iterator iter = input.begin(); int num = random()%end; iter = iter+num; output.push_back(*iter); input.erase(iter); end--; } return output; }
再來一例:
void permutation(int n, int *z_array) { int i, j, k, z; int buffer[N]; /* 初始化數(shù)組 */ for (i=0; i<n; i++) buffer[i]=0; /* 準(zhǔn)備生成隨機(jī)數(shù),以當(dāng)前時(shí)間為種子 */ srand((unsigned)time((long *)0)); /* 獲得不重復(fù)的隨機(jī)數(shù)據(jù) */ for (i=0; i<n; i++) { /* 獲得0~(n-i)的隨機(jī)數(shù)據(jù) */ z = rand()%(n-i); j=0; k=0; while (j<=z) { if (buffer[j+k]==0) j++; else k++; } buffer[j+k-1]=1; z_array[i]=j+k-1; } return; }
方法三:來個(gè)復(fù)雜點(diǎn)的
#include<stdio.h> #include <time.h> #include "iostream" #include <math.h> #define N 53 using namespace std; //print array void display(int *a) { for (int i =0;i<N;i++) { cout<<" "<<a[i]<<" "; } } int main(void) { int b[N],a[N]; for (int i =0;i<N;i++) { b[i] = i+1; } // random(a); srand((unsigned)time(NULL)); int MaxIndex = N; for ( i= 0;i<N;i++) { // int index = (int)rand()%MaxIndex;//隨機(jī)一個(gè) 0 - 52的index a[i] = b[index]; //隨機(jī)到的數(shù)字給a[i],i from 0 to N-1 b[index] = b[MaxIndex-1]; MaxIndex--; } display(a); return 0; }
以上3種方法均可實(shí)現(xiàn)生成不重復(fù)的隨機(jī)數(shù),具體的效率如何,小伙伴們自己測(cè)試下吧。
- c++實(shí)現(xiàn)簡(jiǎn)單隨機(jī)數(shù)的代碼
- c++ 隨機(jī)數(shù)問題的相關(guān)研究
- C++ 隨機(jī)數(shù)字以及隨機(jī)數(shù)字加字母生成的案例
- C++生成隨機(jī)數(shù)的實(shí)現(xiàn)代碼
- C++編程產(chǎn)生指定范圍內(nèi)的隨機(jī)數(shù)
- C++實(shí)現(xiàn)產(chǎn)生隨機(jī)數(shù)和相應(yīng)的猜拳小游戲?qū)嵗a
- C++ 隨機(jī)數(shù)與隨機(jī)種子數(shù)的實(shí)例
- C/C++產(chǎn)生指定范圍和不定范圍隨機(jī)數(shù)的實(shí)例代碼
- C語(yǔ)言/C++中如何產(chǎn)生隨機(jī)數(shù)
- C++產(chǎn)生隨機(jī)數(shù)的實(shí)現(xiàn)代碼
- C++11生成隨機(jī)數(shù)(random庫(kù))的使用
相關(guān)文章
詳解C++中二進(jìn)制求補(bǔ)運(yùn)算符與下標(biāo)運(yùn)算符的用法
這篇文章主要介紹了C++中二進(jìn)制求補(bǔ)運(yùn)算符與下標(biāo)運(yùn)算符的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01C++學(xué)習(xí)之虛函數(shù)表與多態(tài)詳解
這篇文章主要為大家詳細(xì)介紹了C++中虛函數(shù)表與多態(tài)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定的幫助,感興趣的小伙伴可以了解一下2023-03-03C++中幾種將整數(shù)轉(zhuǎn)換成二進(jìn)制輸出的方法總結(jié)
下面小編就為大家?guī)硪黄狢++中幾種將整數(shù)轉(zhuǎn)換成二進(jìn)制輸出的方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09C++ OpenCV實(shí)現(xiàn)銀行卡號(hào)識(shí)別功能
這篇文章主要介紹了如何使用OpenCV C++實(shí)現(xiàn)銀行卡號(hào)識(shí)別功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定幫助,需要的可以參考一下2022-01-01c語(yǔ)言中的二級(jí)指針做函數(shù)參數(shù)說明
這篇文章主要介紹了c語(yǔ)言中的二級(jí)指針做函數(shù)參數(shù)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05