top1编程
← 返回题目
题解

【入门】斜角II

1 条题解

  • 0
    @ 2026-7-31 4:44:42

    解题思路

    这道题要求输出一个 N 行 N 列的方阵,每个位置的值由 i+j 决定。

    观察规律:

    • 左上角 (0,0) 和右下角 (4,4) 是最小值 1
    • 右上角 (0,4) 和左下角 (4,0) 是最大值 5
    • 越往反角线 (i+j=n-1) 靠近,值越大

    可以发现:第 i 行第 j 列的值取决于 i+j 离 0 或 2(n-1) 哪个更近。

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                // 计算 i+j 到中间 (n-1) 的距离
                // 距离越近,值越大
                int s = i + j;
                int d = s;
                if (s > n - 1) d = 2 * (n - 1) - s;
                cout << setw(3) << (d + 1);
            }
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²)
    • 空间复杂度:O(1)
    • 1