五华岐岭联安村举报人:求助:编写一个随机产生的在一定范围的一组不同的数

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/04 21:56:23
3. 生成并输出由 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 (共 16 个数) 构成的随机排列

提示:
int a[16] 用于存放随机排列, a 的特性:
1) a[0] ~ a[15] 的值随机产生
2) a[0] ~ a[15] 的值各不相同

函数:
void randomize(void); 初始化随机数产生器
int random(int num); 产生一个随机数r, 0 <= r <= num - 1

/************************************************************************/
/* 这种做法比较简单,用C++ STL中的算法 VC6编译 */
/************************************************************************/

#include "iostream"
#include "algorithm"
#include "time.h"
using namespace std;

int main() {
int a[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
srand((unsigned)time( NULL));
random_shuffle(a,a+15);
for(int i=0;i<16;i++) cout<<a[i]<<"\t";
cout<<endl;
return 0;
}

/************************************************************************/
/* 用你提供的函数,方法如下: */
/************************************************************************/
/* 这样做能避免多次比较,效果不错, TC下编译 */
/************************************************************************/
#include "iostream.h"
#include "stdlib.h"
#include "time.h"

int main() {
int a[16]={0};
int i,j=0;
randomize();
for(i=0;i<16;i++) {
j = random(16);
while( a[j]!=0 ) j = random(16);
a[j] = i;
}
for(i=0;i<16;i++) cout<<a[i]<<"\t";
cout<<endl;
return 0;
}

#include <iostream.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int a[16];
srand( (unsigned)time( NULL ) );
bool isHad = false;
for(int i = 0;i<16;i++)
{
isHad = false;
int r = rand()%16;
for(int j =0;j<=i;j++)
{
if(r==a[j])
{
isHad = true;
break;

}
}
if(isHad==true)
{
i--;
continue;
}
a[i] = r;
}
for(i = 0;i<16;i++)
cout<<a[i]<<'\t';
//getchar();
}

查一下GNU的开放源码的库, 看它的随机数如何生成的就可以了