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

如何生成无重复随机数及在5×5棋盘正确放置4艘船?

问题解答

问题1:如何生成两组无重复的随机数?组数是否固定?

  • 生成无重复随机数的核心是避免重复选取,实现方式可根据组数需求调整:
    • 组数固定:先从目标数值范围中选取第一组无重复数,再从剩余未被选中的数里选取第二组。
    • 组数不固定:先确定所有可用数的范围,再根据需要多次从剩余数中选取,直到满足组数要求(前提是剩余数足够分配)。

示例代码(生成两组各5个1-20的无重复随机数):

from random import sample

total_range = list(range(1, 21))
group1 = sample(total_range, 5)
remaining_nums = [num for num in total_range if num not in group1]
group2 = sample(remaining_nums, 5)

print("第一组无重复随机数:", group1)
print("第二组无重复随机数:", group2)

注:使用random.sample()可以直接从序列中抽取指定数量的不重复元素,比手动判断更简洁高效。

问题2:解决棋盘船坐标重复导致船数量不足的问题

你的代码问题在于随机生成坐标时未做重复校验,重复的坐标会覆盖之前标记的船,导致最终显示的船数量不足。解决思路是确保每次生成的坐标未被使用过,直到凑齐4个唯一坐标。

修改后的代码:

from random import randint

add_place = []
board = []

# 初始化5x5棋盘
for rows in range(5):
    board.append(["O"] * 5) 

# 生成4个不重复的船位坐标
while len(add_place) < 4:
    add_row = randint(0, 4)
    add_col = randint(0, 4)
    current_pos = [add_row, add_col]
    # 检查坐标是否已存在,不存在则添加
    if current_pos not in add_place:
        add_place.append(current_pos)
        board[add_row][add_col] = "@"

# 打印最终棋盘
for row in board:        
    print(" ".join(row))

说明:用while循环替代原for循环,循环条件是已选坐标数量小于4。每次生成坐标后先校验是否在已选列表中,仅当坐标唯一时才标记到棋盘,确保最终一定有4艘船。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:25:40