阿哈哈哈~
好死不死 前几天在图书馆里翻到一本书
上面刚好就有取乱数不重复的范例 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.继续取乱数