返回列表 回復 發帖

使用亂數的問題

小弟有幾次想要在C++ 裡面使用亂數
印象中,C++的亂數種子srand()所傳入的值會影響
rand的值,於是小弟就用time(NULL)來當亂數種子
用了底下程式來測試
小弟在迴圈裏面:
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
//#inlude<iostream>
//using namespace std;
main()
{
    int a;
    for(int i=0;i<10;i++)
    {
        Sleep(100);
        srand(time(NULL));
        printf("%d",rand()%10);
    }
    getch();
}

調整Sleep的值來觀察結果,得到
如果Sleep(1)數值全部一樣,10以上就會
有部份不同,但是一直到1000 (也就是一秒)
才會真的是比較亂的亂數,但是數值重複率實在太高了
請問有沒有什麼法可以讓程式跑出比較像樣的亂數呢?
之前小弟利用迴圈變數來當亂數種子
結果每次都跑出向這樣的亂數
0140149

1471472

2852953
學習,是為了走更長遠的路
鳳馳電掣:telnet://FHCRC.twbbs.org
srand(...);
是利用傳入的參數去套一個公式算出來的"亂數表"
之所以在sleep設為1毫秒看不出差別就在於此,數字太接近算出來的亂數表可能也差不多

其實亂數表只需要計算一次就可以了,並不需要每次要用rand取值就打亂一次

用以下code去觀察每次打亂的差別即可^^
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<time.h>
  4. #include<stdlib.h>

  5. main()
  6. {
  7.     srand(time(NULL));
  8.     for(int i=0;i<10;i++)
  9.     {
  10.         printf("%d\n",rand()%10);
  11.     }
  12.     getch();
  13. }
複製代碼
1

評分次數

返回列表 回復 發帖