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

顺时针打印n×n螺旋网格并计算对角线元素之和的代码问题

实现目标
  • 顺时针生成并打印n×n螺旋网格
  • 计算网格所有对角线元素的总和,中心重合元素不重复累加

效果示例

当参数n=5时,生成的螺旋网格如下:

21  22  23  24  25
   20   7   8   9  10
   19   6   1   2  11
   18   5   4   3  12
   17  16  15  14  13

对应对角线求和计算:21+7+1+3+13+17+5+9+25 = 101

原有代码问题

给出的初始代码如下:

dim=5
result= n = 1
for in range(2,dim,2):
 for i in range(4):
    n+=k
    result+=n
print(result)

存在的明确问题:

  • 外层for循环缺失循环变量定义
  • 累加步长变量k未声明赋值
  • 无螺旋网格生成、打印的相关逻辑
  • 循环边界、累加逻辑错误,无法正确计算对角线和
  • 代码缩进不规范

可运行正确实现

def generate_spiral(dim):
    # 初始化空网格
    grid = [[0 for _ in range(dim)] for _ in range(dim)]
    # 四个移动方向:右、下、左、上
    move_dir = [(0, 1), (1, 0), (0, -1), (-1, 0)]
    cur_x, cur_y = 0, 0
    dir_index = 0

    # 从1开始按顺时针顺序填充所有格子
    for num in range(1, dim * dim + 1):
        grid[cur_x][cur_y] = num
        # 预计算下一个坐标
        next_x = cur_x + move_dir[dir_index][0]
        next_y = cur_y + move_dir[dir_index][1]
        # 下一个坐标越界/已填充时,顺时针转向
        if next_x < 0 or next_x >= dim or next_y <0 or next_y >= dim or grid[next_x][next_y] != 0:
            dir_index = (dir_index + 1) % 4
            next_x = cur_x + move_dir[dir_index][0]
            next_y = cur_y + move_dir[dir_index][1]
        cur_x, cur_y = next_x, next_y

    # 对齐格式打印网格
    num_width = len(str(dim * dim))
    for row in grid:
        print("  ".join(f"{val:{num_width}d}" for val in row))
    
    # 计算对角线总和
    diag_sum = 0
    for i in range(dim):
        diag_sum += grid[i][i]
        # 跳过中心重复元素
        if i != dim - 1 - i:
            diag_sum += grid[i][dim - 1 -i]
    return diag_sum

if __name__ == "__main__":
    n = 5
    total = generate_spiral(n)
    print(f"\n对角线元素总和:{total}")

运行上述代码,输入n=5时会输出和示例完全一致的网格,最终对角线总和返回101,符合要求。如果需要调整网格大小,直接修改主函数里的n值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:09:22