【问题标题】:Generate a linearly random integer C++ [duplicate]生成一个线性随机整数C++ [重复]
【发布时间】:2019-02-15 10:45:05
【问题描述】:

所以我正在尝试寻找一种非常有效的方法来从一个范围内生成数字。基本上,我正在为计算机与计算机之间的井字游戏编写代码。我想确保计算机在二维数组中随机标记 X/O。一个随机点将是数组[随机][随机]。

例如,我想在 3x3 大小的井字游戏上移动

我用:

int range = 3;
int random = rand() % range + 1; 

数百次后得到的随机数只有3,导致游戏无效。

我想知道您是否可以告诉我如何在一个小范围内生成一个非常线性的随机整数。非常感谢!

【问题讨论】:

  • 在这段代码之前你做了std::srand(std::time(nullptr))吗?
  • “数百次后我得到的随机数只有 3” - 请详细说明该声明。你是说你在上述数百行代码中只实现了一次3?如果是这样,请包含一个 整个 执行此操作的短程序(应该不超过十几行,并且有 #include 文件集和完整的 main()。顺便说一句,是一个 @987654321 @,并将显着提高这个问题的质量。另外,<random> 是现代 C++ 程序的猫须。Worth looking in to

标签: c++


【解决方案1】:

不完全确定“非常线性随机”是什么意思,但如果你的数组是 3x3,我相信你会想要使用

const int range = 3;
int random = rand( ) % range; // Get random index [0 - 2]

为您的 3x3 数组生成有效索引。

或者,如果您的棋盘限制为 3x3,您可以创建一个预定义的 std::vector 对 std::pair - 然后在每个游戏开始时在向量上使用 std::(random_)shuffle。这将避免为已经播放过的空间生成随机坐标。但是,这种方法不适用于更大的电路板。

示例向量:

std::vector<std::pair<size_t, size_t>> coords
{
    std::pair<size_t, size_t>(0, 0),
    std::pair<size_t, size_t>(0, 1),
    std::pair<size_t, size_t>(0, 2),
    std::pair<size_t, size_t>(1, 0),
    // ...
    std::pair<size_t, size_t>(2, 2)
};

请参阅How to shuffle a std::vector,了解有关如何随机播放向量的快速示例。

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 2012-12-17
    • 2013-04-04
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 2013-04-15
    • 2015-07-12
    相关资源
    最近更新 更多