阿哈哈哈~
好死不死 前幾天在圖書館裡翻到一本書
上面剛好就有取亂數不重複的範例 XD
書名:C&C++完美的演譯
作者:松橋工作室
範例是給大樂透取7個號碼
複製程式
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void main()
{
srand(time(NULL));
int max=49;
int n[49]={0};
int x[7]={0};
for(int i=0;i<max;i++)//將1~49灌入 陣列n[]裡面
n[i]=i+1;
for(int j=0;j<7;j++)//取7個數字
{
int choice;
choice=rand()%max;
x[j]=n[choice];//隨機將n[]陣列裡的一個數字給予x[]
for(int k=choice;k<max;k++) //進行遞補
n[k]=n[k+1];
max--;
}
for(int s=0;s<7;s++)
cout<<x[s]<<" "<<endl;
// for(i=0;i<49;i++)
// cout<<"n["<<i<<"]= "<<n[i]<<endl;
}
方法就是
先隨機將n[]陣列裡的一個數字給予x[]
然後將n[]陣列中 被抽出的數字後面的數字通通往前遞補一格
給個例子:
1.
choice取亂數得到3
2.
x[0]=n[3]
此時x[0]=4
3.
n[]進行遞補動作
n[3]=n[4]
n[4]=n[5]
n[5]=n[6]
n[6]=n[7]
n[7]=n[8]
.........
此時的
n[]陣列為:
複製程式
n[0]n[1]n[2]n[3]n[4]n[5]n[6]n[7]...n[46]n[47]n[48]
1 2 3 5 6 7 8 9 48 49 49
x[]陣列為:
複製程式
x[0]x[1]x[2]x[3]x[4]x[5]x[6]
4 0 0 0 0 0 0
4.
因為n[]陣列進行過遞補
所以max要減1
5.繼續取亂數