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

编程入门者咨询:行/列求和矩阵编程题的理解与求解

题意详解

这道题的核心是先搞懂数字排布规则,再明确行、列的定义:

  • 我们需要把数字1到N按顺序填入网格,规则是除最后一行外,每行固定填W个数字,填完一行就换行。
  • 如果数字不够填满最后一行,最后一行仅保留剩余数字,空位不补内容。
  • 行、列均为1-based计数:
    • 行(对应输入的R):横向的一排,最上方为第1行,向下依次递增。
    • 列(对应输入的C):纵向的一列,所有行的第一个数字组成第1列,所有行的第二个数字组成第2列,以此类推。

用样例直观理解排布

第一个测试用例:N=5, W=2

排布后的网格如下:

第1行:1 2
第2行:3 4
第3行:5(空位)
对应列的组成:
第1列:1、3、5
第2列:2、4(最后一行无第二个数,因此列仅到第二行)
查询为2 C即求第2列的和,计算得2+4=6,和样例输出一致。

第二个测试用例:N=10, W=3

排布后的网格如下:

第1行:1 2 3
第2行:4 5 6
第3行:7 8 9
第4行:10(空位、空位)
查询为4 R即求第4行的和,仅包含10,和样例输出一致。

计算逻辑(无需构建矩阵)

不需要真的创建二维数组存储所有数字,直接用等差数列公式计算即可,避免不必要的内存开销。

行求和(op=R)

  • 第X行的第一个数字为:(X-1)*W + 1
  • 该行的数字个数:若为非最后一行则有W个;若为最后一行则有N - (X-1)*W个
  • 该行的数字是连续等差数列,和为:(首项 + 末项) * 个数 // 2

列求和(op=C)

  • 仅当X <= W时存在第X列(每行最多W个数字,列数不会超过W)
  • 第X列的所有数字是公差为W的等差数列:首项为X,后续每一项比前一项大W
  • 列的项数为:(N - X) // W + 1,末项为:(项数 - 1)*W + X
  • 列的和为:(首项 + 末项) * 项数 // 2
示例代码(Python)
T = int(input())
for _ in range(T):
    N, W = map(int, input().split())
    parts = input().split()
    X = int(parts[0])
    op = parts[1]
    if op == 'R':
        first = (X - 1) * W + 1
        if first > N:
            print(0)
            continue
        count = min(W, N - first + 1)
        last = first + count - 1
        res = (first + last) * count // 2
        print(res)
    else:
        if X > W:
            print(0)
            continue
        m = (N - X) // W + 1
        first = X
        last = (m - 1) * W + X
        res = (first + last) * m // 2
        print(res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 11:06:04