大家好,我一直坚持这个问题的时间最长,过去几天一直在这个问题上工作几个小时。我想用类似于下面代码的矢量将一副52张卡片洗牌,但不知道该怎么做。所有帮助将不胜感激。希望它能够采用最基本的代码形式,因为我正在学习入门级课程。 (这不是我任务的全部任务)。
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
vector<int> vi;
for(int i=1; i <= 10; i++)
vi.push_back(i);
//before shuffling
cout <<"Before shuffling: " << endl;;
for(int i=0; i < 10; i++)//printing index: value
cout << i << ": " << vi[i] << endl;
random_shuffle(vi.begin(), vi.end());
cout << "\n ------------ \n";
//after
cout <<"After shuffling: " << endl;
for(int i=0; i < 10; i++)
cout << i << ": " << vi[i] << endl;
}
所以代码随机化数字然而我想随机化一副牌......
在确定如何做到这一点之后,我需要玩家1将它作为一副7张随机牌作为矢量存储,然后将其推回到自己的矢量中。答案 0 :(得分:2)
在新代码中,您要使用std::shuffle
,不 std::random_shuffle
。
使用它,洗牌一副牌看起来像这样:
#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <numeric>
int main() {
std::vector<int> cards(52);
std::iota(cards.begin(), cards.end(), 1);
std::random_device rnd;
std::mt19937_64 gen(rnd());
std::shuffle(cards.begin(), cards.end(), gen);
std::copy(cards.begin(), cards.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}