1 条题解
-
0
思路与算法
矩阵使用从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