top1编程
← 返回题目
题解

【基础】挑战赛第二题——放大的X

1 条题解

  • 0
    @ 2026-7-31 11:21:55

    解题思路

    题目要求打印一个 n×n 的放大字母 X。拿 n=5 来看:

    X   X
     X X
      X
     X X
    X   X
    

    X 出现在哪里? 仔细观察会发现,X 只出现在两条对角线上:

    1. 主对角线:从左上到右下,也就是行号等于列号的位置(i == j)
    2. 反对角线:从右上到左下,也就是行号 + 列号 = n+1 的位置(i + j == n+1)

    其他位置都是空格。

    所以只要用双重循环遍历 n×n 的所有格子,判断当前格子是不是在两条对角线上,是就输出 X,不是就输出空格。

    为什么是 i+j==n+1? 因为如果行和列都从 1 开始数,右上角的格子是第 1 行第 n 列(1+n=n+1),左下角是第 n 行第 1 列(n+1=n+1),这条对角线上任意一个格子的行号加列号都等于 n+1。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        // 双重循环遍历 n*n 的格子
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                // X 出现的位置:主对角线(行=列)和反对角线(行+列=n+1)
                if (i == j || i + j == n + 1) {
                    cout << 'X';
                } else {
                    cout << ' ';
                }
            }
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²),双重循环遍历 n×n 个格子
    • 空间复杂度:O(1)
    • 1