国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實現(xiàn)產(chǎn)生隨機數(shù)和相應(yīng)的猜拳小游戲?qū)嵗a

2020-01-26 13:38:54
字體:
供稿:網(wǎng)友

一、簡介

c++中,產(chǎn)生隨機數(shù)的通用方法就是調(diào)用 srand()rand()  函數(shù)。

Rand

單純的rand()會返回一個0至RAND_MAX之間的隨機數(shù)值,而RAND_MAX的值與int位數(shù)有關(guān),最小是32767。不過rand()是一次性的,因為系統(tǒng)默認的隨機數(shù)種子為1,只要隨機數(shù)種子不變,其生成的隨機數(shù)序列就不會改變。

其實,對于rand()的范圍,我們是可以進行人為設(shè)定的,只需要在宏定義中定義一個random(int x)函數(shù),就可以生成范圍為0至x的隨機數(shù)值。當(dāng)然,也可以定義為random(a,b) ,使其生成范圍為a至b的隨機數(shù)值。具體定義方法在通式部分。

Srand

srand()可用來設(shè)置rand()產(chǎn)生隨機數(shù)時的隨機數(shù)種子。通過設(shè)置不同的種子,我們可以獲取不同的隨機數(shù)序列??梢岳?code>srand((unsigned int)(time(NULL))的方法,利用系統(tǒng)時鐘,產(chǎn)生不同的隨機數(shù)種子。不過要調(diào)用time() ,需要加入頭文件< ctime > 。

值得注意的是,所有程序中“產(chǎn)生”的隨機數(shù)其實是偽隨機數(shù),本質(zhì)是調(diào)用存儲在計算機里的一組無序數(shù)值序列。

因此在初始化隨機數(shù)種子時,如果初始化相同的種子數(shù)值,得到的“隨機數(shù)”會是一樣的數(shù)值。

#include <iostream>#include <cstdlib>using namespace std;int main(){ int i; srand(1); for (i = 0; i < 10; i++) { cout << rand() << " "; }}

第一次運行的結(jié)果。

第二次運行的結(jié)果,可以看出并不是真正意義上的隨機數(shù)。

但是在運行同一次程序時,可以把這些數(shù)字看成是隨機數(shù)。

二、產(chǎn)生隨機數(shù)

關(guān)鍵是調(diào)用 time 函數(shù)初始化隨機數(shù)種子,達到種子隨變。此時需要調(diào)用 <ctime>頭文件。

#include <iostream>#include <ctime>#include <cstdlib>using namespace std;int main(){ int i; srand((unsigned)time(NULL)); for (i = 0; i < 10; i++) { cout << rand() << " "; } return 0;}

第一次運行結(jié)果。

第二次運行結(jié)果,可以看成真正意義上的隨機數(shù)。

當(dāng)需要(0-x)的隨機數(shù)時,只需要在 rand() % x 即可。

當(dāng)需要(0-1)的小數(shù)隨機數(shù)時,只需要 ( rand() % x ) /x 即可,其中 x 與精度有關(guān),可取 x=100 小數(shù)后兩位。

三、猜拳小游戲

#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){ char x; int a; int b; while (1) {  printf("請選擇你要出的:/n");  printf("A:剪刀/n");  printf("B:石頭/n");  printf("C:布/n");  printf("D:不玩了/n");  scanf_s("%c%*c", &x);  switch (x) {  case 65 | 97:   x = 4; break;  case 66 | 98:   x = 7; break;  case 67 | 99:   x = 10; break;  case 68 | 100:   return 0;  default:   printf("Error!");   getchar();   system("cls");   return 0;   break;  }  srand((unsigned)time(NULL));  a = rand() % 3;  b = (int)x + a;  printf("電腦出了");  switch (a) {  case 0:   printf("剪刀/n/n"); break;  case 1:   printf("石頭/n/n"); break;  case 2:   printf("布/n/n"); break;  }  printf("你出了");  switch (x) {  case 4:   printf("剪刀/n/n"); break;  case 7:   printf("石頭/n/n"); break;  case 10:   printf("布/n/n"); break;  }  printf("結(jié)果是:/n/n");  if (b == 6 || b == 7 || b == 11)printf("你贏了!/n/n");  if (b == 5 || b == 9 || b == 10)printf("電腦贏了!/n/n");  if (b == 4 || b == 8 || b == 12)printf("平局!/n/n");  system("pause>nul&&cls"); } return 0;}

第一次。

第二次。

代碼里x的值是考慮了不重復(fù)問題。

電腦a | 玩家x 4剪刀 7石頭 10布
0剪刀 4 7 10
1石頭 5 8 11
2布 6 9 12

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 石狮市| 吉木乃县| 广宗县| 岑溪市| 济阳县| 乐平市| 海城市| 布拖县| 聊城市| 崇义县| 寻甸| 开封市| 吴桥县| 济阳县| 土默特左旗| 浦东新区| 滨州市| 高密市| 金乡县| 淮阳县| 靖宇县| 长丰县| 岳西县| 澜沧| 隆化县| 巴林左旗| 寻甸| 山西省| 水城县| 平远县| 华坪县| 晋中市| 额济纳旗| 四子王旗| 江城| 醴陵市| 洮南市| 常德市| 商城县| 青神县| 梁河县|