酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++ 实现n×n对角线图案输出详解

好的,这是一个很经典的输出对角线图案的编程题目。我将为你提供一个**C++** 的实现,并详细解释代码逻辑。 ## 🎯 问题分析 我们需要输出一个 n × n 的矩阵图案,规则是: - 当行号 == 列号(即左上角到右下角的对角线)时,输出 `#` - 其他位置输出 `*` 注意:行和列通常从 0 或 1 开始索引,这里**行和列均从 1 开始计数**,因为输入样例显示位置 (1,1)、(2,2)、(3,3) 是 `#`。 ## 🖥️ C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 读取输入 for (int i = 1; i <= n; ++i) { // 枚举行号 i(从1开始) for (int j = 1; j <= n; ++j) { // 枚举列号 j(从1开始) if (i == j) { // 对角线条件 cout << "#"; } else { cout << "*"; } } cout << endl; // 一行结束后换行 } return 0; } ``` ## 📝 代码详细解释 | 部分 | 说明 | |------|------| | `cin >> n` | 读取用户输入的边长n | | `for (int i = 1; i <= n; ++i)` | 外层循环,控制行数,i从1到n | | `for (int j = 1; j <= n; ++j)` | 内层循环,控制每行打印的字符数 | | `if (i == j)` | 判断当前位置是否在主对角线上 | | `cout << "#"` / `cout << "*"` | 根据条件输出对应字符 | | `cout << endl` | 每打印完一行所有列后,换行 | ## 🧠 核心思路 **主对角线判断条件**:在一个矩阵中,主对角线上的元素满足 **行号 = 列号**。 因为题目要求左上角到右下角为主对角线,所以我们只需检查 `i == j`。 **时间/空间复杂度**: - 时间复杂度:**O(n²)**(因为需要遍历 n×n 个格子) - 空间复杂度:**O(1)**(只使用了几个基本变量,没有额外的数据结构) ## 🚀 进阶建议 1. **改写成其他循环方式**:也可以用 `while` 循环或 `do-while` 实现,但 `for` 最直观。 2. **扩展到反对角线**:如果想输出右上到左下的对角线,条件改为 `i + j == n + 1`。 3. **字符可定制**:可以将 `#` 和 `*` 替换为其他字符,实现不同样式的对角线图案。 4. **检查输入范围**:题目保证 1 ≤ n ≤ 10,因此不需要额外校验,但真实项目中建议加上边界检查。 ## ✅ 测试用例验证 **样例1** 输入: ``` 3 ``` 输出: ``` #** *#* **# ``` **样例2** 输入: ``` 4 ``` 输出: ``` #*** *#** **#* ***# ``` ## ⚠️ 常见陷阱 - **索引从0还是从1开始**:题目中左上角位置显然对应 (1,1),所以循环从 1 开始。如果从 0 开始,条件应为 `i == j`(因为 i=j=0 也是主对角线),但输出位置视觉上仍匹配。 - **忘记换行**:每输出完一行后必须 `cout << endl`,否则所有字符会挤在同一行。 --- ######[AI写代码神器 | 849点数解答 | 2026-06-06 19:35:28]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]