Chinaunix首页 | 论坛 | 博客
  • 博客访问: 139337
  • 博文数量: 49
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 515
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-08 10:33
文章分类

全部博文(49)

文章存档

2010年(2)

2009年(30)

2008年(17)

我的朋友

分类: C/C++

2009-04-24 11:53:09

这几天编程,要产生一个随机队列,且队列中的每个值都不一样。其实现方式如下:
 
int Static_Que[5];  //数组元素的个数可以自己定义
int sRand_Que[5];   //产生的随机队列,队列中每个值都不一样
 
void TVacancy::GenThesaQue(int num)
{
  int i=0,d=0;
  int num_tmp;
  int rand_a,rand_temp;
  num_tmp = num;
  srand((unsigned)time(NULL));
  for(i=0;i  {
     Static_Que[i] = i;
  }
  for(;num_tmp>0;num_tmp--)
  {
     if(num_tmp == num)
     {
        rand_a = rand()% num_tmp;    //以系统时钟作为随机种子
        rand_temp = rand_a;
        sRand_Que[d++] = Static_Que[rand_a];   
        rand_a++;
        for(;rand_a            Static_Que[rand_a-1] = Static_Que[rand_a];
     }
     else
     {
        srand(rand_temp);     //以上一次产生的随机数作为种子,这样每次的种子就不一样了
        rand_a = rand()%num_tmp;
        rand_temp = rand_a;
        sRand_Que[d++] = Static_Que[rand_a];
        rand_a++;
        for(;rand_a           Static_Que[rand_a-1] = Static_Que[rand_a];
     }
  }
}
 
在实际应用时,只要传入参数num(<=你的数组元素的个数),调用这个函数,就可以产生你需要的数组里面前面num个数的随机排列。
阅读(599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~