【问题标题】:How to generate a random pair of numbers in a loop without duplicate pairs如何在没有重复对的循环中生成随机数字对
【发布时间】:2021-12-25 14:42:49
【问题描述】:

我想编写一个程序,在一个 8x8 二维数组上,我输入一个 0 到 64 之间的整数,它会在数组上随机放置那个数量的“Z”。我不知道如何生成一个没有任何重复对的随机数对循环。由于生成的随机数对将代表 2D 数组中放置“Z”的位置,因此不应生成重复的对,以便打印所有“Z”。

【问题讨论】:

  • 如果数字是从 0 到 64,首先用 -1 填充表格,然后您可以查看特定元素是否已被占用。

标签: c random


【解决方案1】:

由于问题的大小仅为 64,因此一种有效的方法是:

  1. 创建一个包含 64 个项目的数组。每个项目对应于网格中的一个位置。例如,索引 0 处的项目将对应于索引 0 的行和索引 0 的列。索引 63 处的项目将对应于索引 7 的行和索引 7 的列,依此类推。一般来说,将数组的位置映射到网格的公式为:Ai = Gr * grid columns + Gc,其中Ai 是一维数组中的第 i 个元素,Gr 是第 r 行网格,Gc 是网格的第 c 列。
  2. n 乘以字母'Z' 放入数组中,其中n 是用户的输入。例如,您可以将它们全部放在项目数组的第一个 n 位置。
  3. 随机打乱数组。例如,您可以通过执行随机索引的排列(交换)来对其进行洗牌。
  4. 使用与第 1 步中的公式相反的公式将数组中的 'Z' 字母放置到网格中,即:Gr = Ai / grid columnsGc = Ai % grid columns

您也可以完全不需要步骤 1 的临时数组来执行此操作。只需即时翻译每个坐标。

有关相关问题,另请参阅:Choosing random cards from a deck?

【讨论】:

    猜你喜欢
    • 2013-05-26
    • 2013-10-22
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2014-06-18
    相关资源
    最近更新 更多