题解
【基础】挑战赛第二题——放大的X
1 条题解
-
0
解题思路
题目要求打印一个 n×n 的放大字母 X。拿 n=5 来看:
X X X X X X X X XX 出现在哪里? 仔细观察会发现,X 只出现在两条对角线上:
- 主对角线:从左上到右下,也就是行号等于列号的位置(i == j)
- 反对角线:从右上到左下,也就是行号 + 列号 = 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