如何在没有重复对的循环中生成一对随机数字
How to generate a random pair of numbers in a loop without duplicate pairs
我想编写一个程序,在一个 8x8 二维数组上,我输入一个从 0 到 64 的整数,它会随机地将那个数量的 'Z' 放在数组上。我不知道如何生成没有任何重复对的随机数对循环。由于生成的随机数对将表示 'Z' 将放置在二维数组中的位置,因此不应生成重复对,以便打印所有 'Z'。
由于问题的大小仅为 64,执行此操作的有效方法是:
- 创建一个包含 64 个项目的数组。每个项目对应于网格中的一个位置。例如,索引 0 处的项目将对应于索引为 0 的行和索引为 0 的列。索引 63 处的项目将对应于索引为 7 的行和索引为 7 的列,依此类推。一般来说,将数组位置映射到网格的公式为:
Ai = Gr * grid columns + Gc
,其中 Ai
是一维数组项中的第 i 个元素,Gr
是第网格中的第 r 行,Gc
是网格的第 c 列。
- 将
n
乘以数组中的字母 'Z'
,其中 n
是用户的输入。例如,您可以将它们全部放在项目数组的前 n
个位置。
- 随机打乱数组。例如,您可以通过执行随机索引的排列(交换)来对其进行洗牌。
- 使用步骤 1 中公式的逆运算将数组中的
'Z'
个字母放置到网格中,即:Gr = Ai / grid columns
和 Gc = Ai % grid columns
.
您或许也可以在完全不需要步骤 1 的临时数组的情况下执行此操作。只需即时平移每个坐标。
另请参阅:Choosing random cards from a deck? 了解相关问题。
我想编写一个程序,在一个 8x8 二维数组上,我输入一个从 0 到 64 的整数,它会随机地将那个数量的 'Z' 放在数组上。我不知道如何生成没有任何重复对的随机数对循环。由于生成的随机数对将表示 'Z' 将放置在二维数组中的位置,因此不应生成重复对,以便打印所有 'Z'。
由于问题的大小仅为 64,执行此操作的有效方法是:
- 创建一个包含 64 个项目的数组。每个项目对应于网格中的一个位置。例如,索引 0 处的项目将对应于索引为 0 的行和索引为 0 的列。索引 63 处的项目将对应于索引为 7 的行和索引为 7 的列,依此类推。一般来说,将数组位置映射到网格的公式为:
Ai = Gr * grid columns + Gc
,其中Ai
是一维数组项中的第 i 个元素,Gr
是第网格中的第 r 行,Gc
是网格的第 c 列。 - 将
n
乘以数组中的字母'Z'
,其中n
是用户的输入。例如,您可以将它们全部放在项目数组的前n
个位置。 - 随机打乱数组。例如,您可以通过执行随机索引的排列(交换)来对其进行洗牌。
- 使用步骤 1 中公式的逆运算将数组中的
'Z'
个字母放置到网格中,即:Gr = Ai / grid columns
和Gc = Ai % grid columns
.
您或许也可以在完全不需要步骤 1 的临时数组的情况下执行此操作。只需即时平移每个坐标。
另请参阅:Choosing random cards from a deck? 了解相关问题。