生成一系列不重複的隨機數 及寫入檔案
阿新 • • 發佈:2019-01-25
為什麼要寫這個程式:
原因是這樣的,我在寫排序演算法時感覺自己輸入原資料輸入的好累,於是自己想了想決定讓電腦自己輸入,但是由隨機數輸入會有重複的,於是我做了一些修正,實現了:
input: 輸入 n
output: 輸出1-n之間不同的n個數,位置隨機,每個數都會輸出
思路:用隨機數去輸出數,用陣列去接每次要輸出的數。
每次要把隨機數加入陣列時判斷一下,是否和原來的資料重複,重複就不加入,不重複就加入。
生成不重複隨機數的函式是 srandnum(int n) n表示要生成n個隨機數
判斷是否重複的是 isRepeat(int temp) temp是要新加入的數
附上原始碼,並且有相關解釋:
//// 作用是隨機輸出1-n之間的數,n為輸入 ,無重複,共n個
#include <iostream>
#include <ctime>
using namespace std;
int num[1000]; //巨集定義num陣列
int isRepeat(int temp,int n){ //如果相同為1,不同為0
for(int i=0;i<n;i++){
if(temp==num[i]) return 1;
}
return 0;
}
void srandnum(int n){
for(int i=0;i<1000;i++) num[i]=0;
for(i=0;i<n;i++){
int temp = rand()%n+1; //生成1-n之間的隨機數
if(isRepeat(temp,n)){ //如果有重複就重新做一次迴圈,i--
i--;
}
else{
num[i] = temp; //沒重複就把資料儲存在num數組裡面
}
}
}
void main()
{
int n;
cin >>n;
srandnum(n);
for(int i=0;i<n;i++) cout<<num[i]<<" ";
}
轉載請說明部落格出處,謝謝