You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在循环中生成无重复随机数对,在8x8二维数组中随机放置指定数量Z

解决方案

这里提供两种实现思路,适配不同的使用场景:

方案1:全坐标洗牌法(推荐,适用于所有数量场景)

先把8x8数组的所有64个坐标全部生成,打乱顺序后取前N个即可,完全避免重复判断,逻辑最简单不易出错:

  • 首先生成所有坐标对的列表,每个坐标可以用(行号, 列号)的形式存储
  • 对整个坐标列表做随机打乱
  • 取前N个(N是你输入的0-64的整数)坐标,对应位置赋值为'Z'即可
    代码示例(Python为例):
import random

# 初始化8x8数组,默认占位符可按需修改
grid = [['.' for _ in range(8)] for _ in range(8)]
n = int(input("请输入0-64之间的整数:"))

# 生成所有坐标
all_positions = [(i, j) for i in range(8) for j in range(8)]
# 打乱坐标顺序
random.shuffle(all_positions)
# 取前n个坐标赋值为Z
for x, y in all_positions[:n]:
    grid[x][y] = 'Z'

# 打印结果验证
for row in grid:
    print(' '.join(row))

方案2:随机生成+去重校验(适合n较小的场景,比如n<16)

如果需要生成的Z数量很少,不需要生成全量坐标,可以用集合存储已经用过的坐标,生成新坐标后先判断是否已经存在,不存在再使用:

  • 初始化一个空集合用来存储已经使用的坐标
  • 循环直到集合长度等于n:
    • 随机生成0-7之间的行号和列号
    • 把坐标转成可哈希的元组判断是否在集合中
    • 不在的话就加入集合,同时给数组对应位置赋值'Z'
      代码示例(Python为例):
import random

grid = [['.' for _ in range(8)] for _ in range(8)]
n = int(input("请输入0-64之间的整数:"))
used = set()

while len(used) < n:
    x = random.randint(0,7)
    y = random.randint(0,7)
    if (x,y) not in used:
        used.add((x,y))
        grid[x][y] = 'Z'

# 打印结果验证
for row in grid:
    print(' '.join(row))

注意:当n接近64的时候,方案2会出现大量重复生成的情况,效率极低,这种场景优先用方案1。

内容的提问来源于stack exchange,提问作者Kaible

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:36:04