我试图创建一个老虎机,在这里我必须从2-7生成3个随机数,然后使用这个输出来给出不同的结果。例如,如果输出是777,然后你的赌注被乘以10,如果它是222,那么它被乘以5。我似乎不能把rand函数的输出放入一个变量中去使用它,并且它没有正确地计算。
代码:
这不是完整的代码
if (bet <= 2000)
{
std::cout << endl;
int game_num = 0;
srand (0);
for (int i = 0; i < 3; i++)
std::cout << (rand() % 1) + 2;
std::cout << endl;
if (game_num == 777)
{
bet = bet * 10;
std::cout << "You Won: " << bet << endl;
return 0;
}
else if (game_num == 222 || 333 || 444 || 555 || 666)
{
bet = bet * 5;
std::cout << "You Won: " << bet << endl;
return 0;
}发布于 2022-09-04 11:22:06
问题是,在这种情况下,没有正确地播种随机数生成器。
每次程序运行时,这都会返回相同的随机数序列。
srand(0)每次运行程序时,您都希望为随机数生成器添加一个新值。
在运行时使用时间戳将启用该行为。
srand(time(0))发布于 2022-09-04 11:30:51
丹的答案是正确的,你每次都使用相同的种子,所以每一个数字序列都是相同的。你需要一个随机值的种子。从随机性的角度来说,时间不是很好,但除非你在同一秒钟内运行两次(因为time()只计算秒和秒),否则它是有效的。渴望现代计算机,不像1970年代发明这种播种方式的计算机)。
所以,老实说,不要使用srand或rand 来代替。首先,它们是糟糕的随机数生成器,它们对“隐藏”状态的依赖使它们成为了一场噩梦。很简单。无视他们的存在!
C++带来了自己的随机设施:
您想要一个统一的整数分布,所以使用uniform_int_distribution。从实际随机生成事件中获得一个实际随机值的种子。
#include <random>
// …
// Somewhen before you need the random numbers, not every time:
// Will be used to obtain a seed for the random number engine
std::random_device real_random;
// Set up the generator for random bits, seed it from the actual random
std::mt19937 gen(real_random());
// Use that to generate random numbers in [2,7]
std::uniform_int_distribution<> distrib(2, 7);
// Where you need the randomness:
for (int i = 0; i < 3; i++)
std::cout << distrib(gen) << "\n";https://stackoverflow.com/questions/73598901
复制相似问题