有一个小问题,以前也留意过,就是使用 rand 函数时,会产生相同的数据 MSDN 所说,使用 srand ,srand( (unsigned)time( NULL ) ); 无济于事因为要求是产生 2007 个不同的随机数,然后输出中间那一个我试过,然后进行比较测试,出来几十个一样的数,顺便输出相同的那两个数的位置,查看果然是相同的有没有办法保证产生绝对的随机,也就是用什么样的方法能产生 2007(或者更多) 的数,保证 2007 个数中没有一个是相同的

解决方案 »

  1.   

    随机数都是伪随机,是根据某种算法从一个种子计算得出的。如果用srand((unsigned)time(NULL)),两次调用srand的间隔太短,产生的随机数序列就是相同的,你可以换种方法确保每次srand的参数不同。
      

  2.   

    这个确实跟time的选取关系很大,试下用高精度的时钟,再增加调用的时间间隔。
      

  3.   

    rand 是使用线性伪随机,产生的数值范围是0~65535,重复的概率还是蛮大滴···
      

  4.   

    DWORD dwTime = GetTickCount();
    srand(dwTime);rand();
    这个是我的调用顺序。
      

  5.   

    srand()传入的参数一样,rand出来的序列就是一样的。因为他们产生的序列是伪随机数。
      

  6.   

    srand(GetTickCount());
    rand()
    这个之间得sleep(20) 时钟大概能感觉到 20毫秒以上的频率,所以你调用的太快,是没有变化的