°reminis573 2023-10-15 22:16 采纳率: 50%
浏览 8

棋盘覆盖的结果为什么不对

示例输入为2,2,2
示例结果应该为:
2 2 3 3
2 0 1 3
4 1 1 5
4 4 5 5
但此代码的输出为:
2 2 3 3
2 0 2 3
4 3 4 5
4 4 5 5
应该如何修改?


def chessBoard(tr, tc, dr, dc, size):
    global board, t
    if size == 1:
        return
    t += 1
    s = size // 2
    if dr < tr + s and dc < tc + s:#左上
        chessBoard(tr, tc, dr, dc, s)
    else:
        board[tr + s - 1][tc + s - 1] = t
        chessBoard(tr, tc, tr + s - 1, tc + s - 1, s)
    if dr < tr + s and dc >= tc + s:#右上
        chessBoard(tr, tc + s, dr, dc, s)
    else:
        board[tr + s - 1][tc + s] = t
        chessBoard(tr, tc + s, tr + s - 1, tc + s, s)
    if dr >= tr + s and dc < tc + s:#左下
        chessBoard(tr + s, tc, dr, dc, s)
    else:
        board[tr + s][tc + s - 1] = t
        chessBoard(tr + s, tc, tr + s, tc + s - 1, s)
    if dr >= tr + s and dc >= tc + s:#右下
        chessBoard(tr + s, tc + s, dr, dc, s)
    else:
        board[tr + s][tc + s] = t
        chessBoard(tr + s, tc + s, tr + s, tc + s, s)


k = int(input("请输入 k 的值:"))
dr = int(input("请输入 dr 的值:"))
dc = int(input("请输入 dc 的值:"))
size = 2 ** k
tr = 0
tc = 0
t = 0
board = [[0] * size for _ in range(size)]
chessBoard(0, 0, dr-1, dc-1, size)

for r in range(size):
    for c in range(size):
        print("%2d " % board[r][c], end='')

    print()
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-16 09:02
    关注

    【以下回答由 GPT 生成】

    问题出在第27行的代码board[tr + s - 1][tc + s] = t。该行代码将右上方格的值赋为t,而正确的是将右上方格的值赋为t+1

    以下是修改后的代码:

    def chessBoard(tr, tc, dr, dc, size):
        global board, t
        if size == 1:
            return
        t += 1
        s = size // 2
        if dr < tr + s and dc < tc + s:  # 左上
            chessBoard(tr, tc, dr, dc, s)
        else:
            board[tr + s - 1][tc + s - 1] = t
            chessBoard(tr, tc, tr + s - 1, tc + s - 1, s)
        if dr < tr + s and dc >= tc + s:  # 右上
            chessBoard(tr, tc + s, dr, dc, s)
        else:
            board[tr + s - 1][tc + s] = t + 1  # 修改此处
            chessBoard(tr, tc + s, tr + s - 1, tc + s, s)
        if dr >= tr + s and dc < tc + s:  # 左下
            chessBoard(tr + s, tc, dr, dc, s)
        else:
            board[tr + s][tc + s - 1] = t
            chessBoard(tr + s, tc, tr + s, tc + s - 1, s)
        if dr >= tr + s and dc >= tc + s:  # 右下
            chessBoard(tr + s, tc + s, dr, dc, s)
        else:
            board[tr + s][tc + s] = t
            chessBoard(tr + s, tc + s, tr + s, tc + s, s)
    

    运行修改后的代码,将得到期望的输出结果。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月15日