# 亂數函數 2020, jeeeerrrpop --- ## rand() [C++ reference-rand](http://www.cplusplus.com/reference/cstdlib/rand/) ```cpp #include <iostream> #include <cstdlib> int main() { for(int i = 0; i < 5; i++) std::cout << rand(); return 0; } ``` --- 怎麼好像每次數字都一樣? --- ```cpp static unsigned long int next = 1; int rand(void) // RAND_MAX assumed to be 32767 { next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768; } ``` [source](https://stackoverflow.com/questions/4768180/rand-implementation) --- ```cpp #include <iostream> #include <cstdlib> int main() { srand(7122); for(int i = 0; i < 5; i++) std::cout << rand() << std::endl; return 0; } ``` --- ```cpp void srand(unsigned int seed) { next = seed; } ``` --- [c++ reference - time](http://www.cplusplus.com/reference/ctime/time/) --- ```cpp #include <iostream> #include <cstdlib> #include <ctime> int main() { srand(time(NULL)); for(int i = 0; i < 5; i++) std::cout << rand() << std::endl; return 0; } ``` --- 如果我想產生0~9之間隨機的數字 ```cpp #include <iostream> #include <cstdlib> #include <ctime> int main() { srand(time(NULL)); std::cout << rand() % 10; return 0; } ``` --- 如果我想產生1~10之間隨機的數字 ```cpp #include <iostream> #include <cstdlib> #include <ctime> int main() { srand(time(NULL)); std::cout << rand() % 10 + 1; return 0; } ``` --- 如果我想產生x~y之間隨機的數字 ```cpp #include <iostream> #include <cstdlib> #include <ctime> int main() { srand(time(NULL)); int x = 133, y = 999; std::cout << rand() % (y - x + 1) + x; return 0; } ``` --- ## 延伸學習 [C++11 的 Random library, 你還在用rand()嗎?](http://chino.taipei/note-2016-1020C-11-的-Random-library-你還在用rand-嗎/)
{"metaMigratedAt":"2023-06-15T06:24:22.601Z","metaMigratedFrom":"Content","title":"亂數函數","breaks":true,"contributors":"[{\"id\":\"7692497a-be9a-4cb4-81b9-afb37e7453a8\",\"add\":1910,\"del\":160}]"}
    527 views