题目解析
* 输入输出:输入一个奇数 NNN,输出 NNN 行,每行 NNN 个字符,构成一个 N×NN \times NN×N 的矩阵;其中两条对角线(从左上到右下、从右上到左下)为 +,其余位置为 -。
* 数据范围:5≤N≤495 \leq N \leq 495≤N≤49 且 NNN 为奇数,矩阵规模较小。
* 复杂度要求:时间复杂度 O(N2)O(N^2)O(N2),最多输出 49×49=240149 \times 49 = 240149×49=2401 个字符;空间复杂度 O(1)O(1)O(1),无需存储整个矩阵,可直接输出。
* 算法知识点:模拟、矩阵遍历、坐标性质判断
思路解析
1. 遍历矩阵:使用双重循环,外层控制行号 iii(从 111 到 NNN),内层控制列号 jjj(从 111 到 NNN),依次确定每个位置的字符。
2. 对角线判定:利用二维坐标的几何性质判断当前位置是否在 XXX 形的两条对角线上:
* 主对角线(左上到右下):满足 i=ji = ji=j(行号等于列号)
* 副对角线(右上到左下):满足 i+j=N+1i + j = N + 1i+j=N+1(行号与列号之和等于矩阵维度加1)
3. 输出字符:若当前位置满足任一上述条件,则输出 +;否则输出 -。每行结束后输出换行。
完整代码