骰子投掷问题
Dice Throwing Issue
本文关键字:问题 更新时间:2023-10-16
游戏的规则是这样的:编写一个程序,允许一定数量的玩家进行一定数量的骰子投掷。让程序计算每个球员的投掷和打印出获胜者的总和(最大的总和)。如果两个或更多球员的总和相同,那么获胜者是一个,他投掷了6个。
。这是我到目前为止得到的:
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
int main(){
srand(time(NULL));
int numberOfPlayers;
int numberOfThrows;
int sum = 0;
int throws = 0;
cout << "Enter the amount of players: "; cin >> numberOfPlayers;
cout << "How many throws does each one have?? "; cin >> numberOfThrows;
cout << endl;
for(int i = 1; i <= numberOfPlayers; i++){
for(int j = 0; j < numberOfThrows; j++){
throws = rand()%6+1;
sum = sum + throws;
}
cout << "Sum of the player " << i << " is: " << sum;
cout << endl;
sum = 0;
}
return 0;
}
我坚持在那个点上,我需要打印出一个人投掷的数字,总结每个玩家的投掷并扫描扔掉6的人。
这是使用std::vector
和库count
和accumulate
算法的实现。
基本上,这里发生的事情是,我制作了一个名为Parlythrows的向量向量,该向量包含每个玩家的投掷向量。这样,您可以跟踪每个球员的每一场比赛。然后,当您循环浏览numberOfPlayers
时,我在playerThrows
中放置了一个新向量,每次投掷,我都会向throws的向量推回一个值。
然后,在进行了所有投掷之后。我通过调用accumulte
算法找到所有投掷的总和。并使用count
算法计数6的数量。您想做的事取决于您。对于此示例,我只是打印了值。
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <time.h>
#include <stdlib.h>
using namespace std;
int main() {
// You should look into the <random> header rather than srand
srand(time(NULL));
int numberOfPlayers;
int numberOfThrows;
vector<vector<int>> playerThrows;
cout << "Enter the amount of players: "; cin >> numberOfPlayers;
cout << "How many throws does each one have?? "; cin >> numberOfThrows;
cout << endl;
// Do throws for each player
for (int i = 0; i != numberOfPlayers; ++i) {
playerThrows.emplace_back(vector<int>{}); // Make vector for player
for (int j = 0; j < numberOfThrows; ++j)
playerThrows[i].push_back(rand() % 6 + 1);
// Find sum
auto sum = accumulate(playerThrows[i].begin(), playerThrows[i].end(), 0);
// Find 6's
auto sixes = count(playerThrows[i].begin(), playerThrows[i].end(), 6);
cout << "Sum of player " << i + 1 << " is: " << sum << 'n';
cout << "They had " << sixes << " 6's" << "nn";
}
return 0;
}
您可能还需要考虑查看<random>
标题以获取更好的随机数,而<chrono>
进行计时。
根据评论中的要求。这是仅使用C 标头的版本:
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <random>
int main() {
// Using <random> header
std::random_device seeder {};
std::mt19937 generator(seeder());
std::uniform_int_distribution<int> diceGenerator(1, 6);
int numberOfPlayers;
int numberOfThrows;
std::vector<std::vector<int>> playerThrows;
std::cout << "Enter the amount of players: ";
std::cin >> numberOfPlayers;
std::cout << "How many throws does each one have: ";
std::cin >> numberOfThrows;
std::cout << std::endl;
// Do throws for each player
for (int i = 0; i != numberOfPlayers; ++i) {
playerThrows.emplace_back(std::vector<int>{}); // Make vector for player
for (int j = 0; j < numberOfThrows; ++j)
playerThrows[i].push_back(diceGenerator(generator));
// Find sum
auto sum = std::accumulate(playerThrows[i].begin(), playerThrows[i].end(), 0);
// Find 6's
auto sixes = std::count(playerThrows[i].begin(), playerThrows[i].end(), 6);
std::cout << "Sum of player " << i + 1 << " is: " << sum << 'n';
std::cout << "They had " << sixes << " 6's" << "nn";
}
return 0;
}
满足您需求的一种方法是为玩家创建一个结构,该结构可以存储他的投掷之和6的数量。
struct Player {
int sum;
int numSix;
Player():sum(0),numSix(0){}
};
使用此结构,您可以创建一个大小为numberOfPlayers
的数组。
auto players = new Player[numberOfPlayers];
在您的投掷循环中,将投掷添加到播放器中:
throws = rand()%6+1;
players[i].sum += throws;
players[i].numSix += throws/6; //either 0 or 1 in case of 6
最后,您可以循环浏览玩家数组,并检查谁赢得了比赛,以及每个玩家在平等的情况下都有多少个玩家。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题