| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6048 人关注过本帖
标题:求解:srand((unsigned)time(NULL));
只看楼主 加入收藏
钉子刘
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2013-6-4
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:11 
求解:srand((unsigned)time(NULL));
在rand()函数前加了srand((unsigned)time(NULL));还是得到相同的结果。
系统时间太相近,那怎么样让它有所不一样呢?
2013-07-01 11:09
钉子刘
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2013-6-4
收藏
得分:0 
有这种表述方法么:srand((unsigned)time(NULL)*1000);????
2013-07-01 11:23
veketdelphi
Rank: 5Rank: 5
等 级:职业侠客
帖 子:67
专家分:374
注 册:2013-4-8
收藏
得分:3 
rand前要srand
rand 要 放  循环 内
2013-07-01 11:42
钉子刘
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2013-6-4
收藏
得分:0 
回复 3楼 veketdelphi
有时候rand()不需要个放在循环内,也特意把它安在循环内么
2013-07-01 12:02
空白先生
Rank: 2
等 级:论坛游民
帖 子:115
专家分:95
注 册:2012-12-9
收藏
得分:3 
在说这个问题前先说说srand的作用和用法
srand()函数:
   原型: void srand(unsigned seed)
   功能: 产生随机数的起始发生数据,和rand函数配合使用
   头文件: stdlib.h   time.h
   例:
   #include <stdio.h>
   #include <stdlib.h>
   #include <time.h>

   int main(void)
   {
       int i;
       time_t t;
       srand((unsigned) time(&t));
       printf("Ten random numbers from 0 to 99\n\n");
       for (i=0; i<10; i++)
       printf("%d\n", rand()%100);
       return 0;
   }

    这时运行程序,会发现每次产生的随机数都不一样。这是因为这里采用了时间作为种子,而时间在每时每刻都不相同,所以就产生了"随机"的随机数了。所以,要想产生不同的随机数,在使用rand之前需要先调用srand。

printf("My goal is to be  good at computer")
2013-07-01 15:29
空白先生
Rank: 2
等 级:论坛游民
帖 子:115
专家分:95
注 册:2012-12-9
收藏
得分:0 
如果代码改成
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
   {
       int i;
       //time_t t;
       printf("Ten random numbers from 0 to 99\n\n");
       for (i=0; i<10; i++)
       {
           srand((unsigned) time(NULL));
           printf("%d\n", rand()%100);
       }
       return 0;
   }
那么输出来的数字是一样的,说明rand要放在循环里面,srand要放在循环外面


printf("My goal is to be  good at computer")
2013-07-01 15:35
空白先生
Rank: 2
等 级:论坛游民
帖 子:115
专家分:95
注 册:2012-12-9
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
   {
       int i;
       srand((unsigned) time(NULL));
       printf("Ten random numbers from 0 to 99\n\n");
       for (i=0; i<10; i++)
       printf("%d\n", rand()%100);
       return 0;
   }

这样输出来10个随机数

printf("My goal is to be  good at computer")
2013-07-01 15:36
空白先生
Rank: 2
等 级:论坛游民
帖 子:115
专家分:95
注 册:2012-12-9
收藏
得分:0 
回复 4楼 钉子刘
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
   {
       int i;
       srand((unsigned) time(NULL));
       printf("3 random numbers from 0 to 99\n\n");
      
       printf("%d\n", rand()%100);
       printf("%d\n", rand()%100);
       printf("%d\n", rand()%100);
       return 0;
   }
这样子也是输出3个随机数的
说明在rand前不要重复使用srand((unsigned) time(NULL))
一个即可

printf("My goal is to be  good at computer")
2013-07-01 15:49
钉子刘
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2013-6-4
收藏
得分:0 
回复 7楼 空白先生
我遇到的情况是在嵌套函数里:我把重要的代码截下来了
程序代码:
void changeSchedule()
{    int num;
        srand((unsigned)time(NULL)); 
        num=rand()%2;
    //随机选择一种方案
    cout<<"随机选了第"<<num<<"种方案:"<<endl;
    switch(num)
    {
    case 0:
        {
        swap();
        break;
        }
    case 1:
        {
        remap();
        break;
        }
    }
    return;
}
void swap()
{  srand((unsigned)time(NULL)); 
   //随机取出两处理器
   while(pro1==pro2)
   {
      pro1=1+rand()%PRONUM;
      pro2=1+rand()%PRONUM;      
   }
   if(temp1!=0 && temp2!=0)
   {   tempp1=ran1[rand()%temp1];
       tempp2=ran2[rand()%temp2];
   }
   else       changeSchedule();   
   return;
}

结果是迭代了2000多次才会得到不一样的随机结果。。。这是代码的问题嘛?
2013-07-02 15:55
空白先生
Rank: 2
等 级:论坛游民
帖 子:115
专家分:95
注 册:2012-12-9
收藏
得分:0 
回复 9楼 钉子刘
第一段是选择第几种方案,如果是第0中方案就运行swap函数
swap函数的话只看懂要得到两个不同的随机数,然后就看不懂了

printf("My goal is to be  good at computer")
2013-07-02 20:48
快速回复:求解:srand((unsigned)time(NULL));
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016852 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved