1 条题解

  • 0
    @ 2026-10-26 10:13:15

    思路与算法

    矩阵使用从0开始的行下标i、列下标j。主对角线满足i=j,副对角线满足i+j=n-1。读入每个元素后,若两个条件至少一个成立就加10,随后按原矩阵行列顺序输出。代码边读边处理,不必保存整个矩阵。

    正确性说明

    两个下标条件分别且准确描述两条对角线。对每个元素,若属于两条对角线的并集就恰好执行一次加10,否则保持原值。特别是奇数阶中心同时满足两个条件,逻辑或仍只使加法执行一次,符合公开样例。因此全部元素按题意更新,按原下标顺序输出得到目标矩阵。

    复杂度

    读取、判断和输出共n²个元素,总时间O(n²)。代码只保存n、下标和当前元素,额外空间O(1),初始化O(1)。元素原为1至99,更新后最大109,int足够;n在2至20。

    易错点

    下标从0开始时副对角线为i+j=n-1。不要写两个独立if导致奇数中心加20。非对角线不能修改。每行恰好n数、共n行,数字间一个空格。

    参考代码(C++11)

    #include <iostream>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                int v;
                cin >> v;
                if (i == j || i + j == n - 1)
                    v += 10;
                if (j)
                    cout << ' ';
                cout << v;
            }
            cout << '\n';
        }
    }
    
    • 1

    信息

    ID
    1698
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者