1. 小杨的X字矩阵问题解析
今天我们来拆解一个经典的编程练习题——小杨的X字矩阵。这个题目看似简单,但蕴含着循环控制、条件判断和图形输出等多个编程基础知识点。作为C++初学者必练的图形输出类题目,它能很好地检验我们对循环和分支结构的掌握程度。
题目要求我们根据输入的整数n,输出一个n×n的矩阵,其中两条对角线上的元素为'+',其余位置为'-',最终形成一个清晰的X形图案。比如当n=5时,输出如下:
code复制+---+
-+-+-
--+--
-+-+-
+---+
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路分析
2.1 图形规律观察
首先我们需要仔细观察X形矩阵的规律。对于一个n×n的矩阵,有两条明显的对角线:
- 主对角线(左上到右下):这条线上所有点的行号i和列号j满足i == j
- 副对角线(右上到左下):这条线上所有点的行号和列号满足i + j == n + 1
以5×5矩阵为例:
- 主对角线上的点有:(1,1)、(2,2)、(3,3)、(4,4)、(5,5)
- 副对角线上的点有:(1,5)、(2,4)、(3,3)、(4,2)、(5,1)
2.2 两种解题思路
基于这个观察,我们可以衍生出两种不同的解题方法:
- 直接判断法:在双重循环中直接判断当前点是否满足对角线条件
- 游标追踪法:使用两个变量动态追踪每行中需要输出'+'的位置
3. 解法一:直接判断法实现
3.1 代码实现
cpp复制#include <iostream>
using namespace std;
int main() {
int n;
cin >> n; // 输入矩阵大小
for(int i = 1; i <= n; i++) { // 控制行数
for(int j = 1; j <= n; j++) { // 控制列数
if(i == j || i + j == n + 1) { // 判断是否在对角线上
cout << '+';
} else {
cout << '-';
}
}
