撲克牌產生器 ─ Lesson Activity Toolkit 教學. 525 views • May 18, 2011 • SMART Notebook 圖庫- Lesson Activity Toolkit 隨機亂數工具- 撲克牌 ... ... <看更多>
撲克牌產生器 在 More content - Facebook 的推薦與評價
【康軒數位】 康軒桌遊卡產生器,讓您課課有桌遊! 老師有許多桌遊優良教案,卻沒有時間製作桌遊卡牌嗎? 好康報乎您知!除了康軒所提供的客製化桌遊牌卡, ... ... <看更多>
撲克牌產生器 在 [菜單] 30-40K 5900X撲克運算機搭配請益(內有選手) 的推薦與評價
未買(元):29219/37639 預算/用途: 德州撲克的納什均衡運算以及日常文書遊戲CPU (中央處理器):AMD R9 5900X MB (主機板):華碩ROG STRIX B550-F ... ... <看更多>
撲克牌產生器 在 [課業] C++亂數產生器語法- 精華區NTUE-CS99 - 批踢踢實業坊 的推薦與評價
亂數的運作
亂數(random number)是指隨機產生的數字。隨機也就是指每個數字出現的機率
都是一樣的,所以我們可以利用亂數來模擬投硬幣、骰子或是發撲克牌、樂透
等等。以投硬幣來說,我們可以讓電腦產生0或1的亂數,分別代表硬幣正反面
當然電腦不可能真的去投硬幣,電腦是利用統計原理產生出來的亂數表來產生
亂數。有了亂數表,就可以產生亂數了。但是,如果程式沒有更換亂數表,每
次執行程式的時候,都會使用預設的那張亂數表,導致每次的結果都一樣,降
就不叫亂數了,所以在程式的一開始,需要每次都找一張不同的亂數表,通常
我們會用時間當作種子,因為每次執行程式的時間都不一樣( 排除每次執行程
式都把時間調成一樣這種搗蛋的情況 ),所以就可以拿到每次執行都不一樣的
亂數囉。
C++裡面,亂數產生器會產生int範圍的整數,也就是說,3287898 類似這樣的東西
可是我們需要的可能只是1~6或者0,1,那要怎麼辦呢?
先假設亂數的範圍是1~100
要產生0,1的亂數 有很多方法
EX: 把1~50當做0, 51~100當做1
或者 把單數當作0, 雙數當作1
那如果是產生1~6的話
最簡單的方式就是取餘數來切割亂數範圍
rand()%6+1; 把亂數除以六再加一 相當於產生1,2,3,4,5,6的亂數
但如果範圍是1~100,勢必會變成不公平的骰子
因為C++裡面產生的亂數範圍高達2^32,就可以達到統計所說的,骰子投一百萬次
機率會很接近1/6一樣。
PS:
有一個公式大家可以參考一下
產生a到b之間的亂數 (rand()%(b-a+1))+a;
EX: 產生1~6 rand()%6+1;
亂數產生器的語法
rand();
任意產生int範圍( -2^31 ~ (2^31)-1 )內的一個整數,不用傳入值
srand(unsigned int n);
選取第n張亂數表 ( n 又稱種子 必須要是正整數 )
time(time_t*);
傳回現在到格林威治1970/1/1 12:00am的秒差
結合time跟srand : srand((unsigned)time(NULL)); (當做公式背下來)
rand 和 srand 需要 #include<stdlib.h>
time 需要 #include<time.h>
亂數產生器的用法
舉投銅板的例子
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main(){
srand((unsigned)time(NULL)); //選一張亂數表
int a;
a=rand()%2; //產生0,1的亂數
if(a==0){ //0當反面
cout<<"硬幣投出反面";
} else { //1當正面
cout<<"硬幣投出正面";
}
}
... <看更多>