如何在没有重复对的循环中生成一对随机数字

How to generate a random pair of numbers in a loop without duplicate pairs

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

由于问题的大小仅为 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? 了解相关问题。