如何从多个数组中绘制多个随机变量?
Posted
技术标签:
【中文标题】如何从多个数组中绘制多个随机变量?【英文标题】:How can i draw multiple random variables from multiple arrays? 【发布时间】:2022-01-09 12:10:01 【问题描述】:我对 c++ 非常陌生,而且真的是一般的编程。为了学习如何使用该语言,我正在尝试创建一个非常简单的二十一点游戏。
我目前有下面的代码,它定义了卡片是什么,并在引入一些定义这些变量可能性的数组之前添加了卡片所需的变量。
#include <iostream>
#include <ctime>
#include <stdio.h>
#include <string>
using std::string;
using std::cout;
using std::cin;
using std::endl;
struct DefineCard
char cardSuit;
int cardFace;
int cardValue;
int cardStatus;
Deck[53];
int main()
string cardSuits[4] = "clubs", "spades", "hearts", "diamonds" ;
string cardFaces[13] = "ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king" ;
string cardStatus[3] = "in play", "in deck", "discarded" ;
int cardValue[13] = 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 ;
从这段代码中,假设我正确,我将如何随机抽取一张包含所有这些变量的随机卡片,然后确保同一张卡片不会被抽两次?
感谢所有的帮助,对于我的任何明目张胆的误解,我很抱歉 :)
【问题讨论】:
把你的 52 张牌放在一个 std::vector 中,然后使用 std::shuffle 洗牌。然后,deck[0] 是下一张要选择的牌。 Ace 值为 11... 或 1 【参考方案1】:我假设你可以这样做:
按照 drescherjm 在他们的评论中所说的去做(将每张独特的卡片放入 std::vector
套牌,然后将 std::shuffle
放上去,可选)。
另外,请考虑将 cardFace
和 cardStatus
的类型更改为 std::string
,这就是它们的表示方式(除非我遗漏了什么)。
这是我使用 DefineCard
结构构建和洗牌的天真的想法:
std::vector<DefineCard> deck;
// iterate through the four card suits
for (int i 0 ; i < 4; ++i)
// iterate through the thirteen card values and faces
for (int j 0 ; j < 13; ++j)
// all cards start "in deck"; need to static_cast ""in deck"" to string because it's currently a string literal (const char*, not std::string)
DefineCard card cardSuits[i], cardFaces[j], cardValue[j], static_cast<string>("in deck") ;
// add the new card to the end of the vector (same as append() in Python)
deck.push_back(card);
// shuffle the deck randomly (need to #include <random> for std::shuffle() and #include <chrono> to get a seed value)
std::shuffle(deck.begin(), deck.end(), std::default_random_engine(std::chrono::system_clock::now().time_since_epoch().count()));
【讨论】:
我强烈支持这个答案以上是关于如何从多个数组中绘制多个随机变量?的主要内容,如果未能解决你的问题,请参考以下文章