C++ 小行星矩阵输出:循环与条件判断的简单实践
好的,我们来分析一下小核桃的这个“小行星矩阵”问题。这是一个非常基础的C++编程练习,主要考察循环和条件判断。 ## 🚀 问题分析 用户需要输出一个 `n` 行 `m` 列的矩阵。这个矩阵有一个特殊规则: - 除了**最后一列**,矩阵的其他位置都输出 `*`。 - **最后一列**的所有行都输出 `#`。 输入是 `n` 和 `m`,输出就是按照上面规则生成的矩阵。 ## 📜 解题思路 我们可以通过**两层循环**来解决这个问题: 1. **外层循环**控制行数(从 1 到 n)。 2. **内层循环**控制列数(从 1 到 m)。 3. 在内层循环中,判断当前列是否为最后一列(即 `列号 == m`): - 如果是最后一列,输出 `#`。 - 否则,输出 `*`。 4. 每完成一行输出后,记得换行。 ## 💻 C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n, m; // 读取行数和列数 cin >> n >> m; // 外层循环:遍历每一行 for (int i = 0; i < n; i++) { // 内层循环:遍历每一列 for (int j = 0; j < m; j++) { // 判断是否为最后一列 if (j == m - 1) { cout << "#"; } else { cout << "*"; } } // 每输出完一行,换行 cout << endl; } return 0; } ``` ### 📋 代码详解 1. **`#include <iostream>`**:引入输入输出流库,用于 `cin` 和 `cout`。 2. **`using namespace std;`**:使用标准命名空间,避免每次都要写 `std::`。 3. **`int n, m;`**:声明两个整型变量,用来存储用户输入的行数和列数。 4. **`cin >> n >> m;`**:从标准输入读取两个整数。 5. **`for (int i = 0; i < n; i++)`**:外层循环,`i` 从 0 到 `n-1`,共循环 `n` 次,代表每一行。 6. **`for (int j = 0; j < m; j++)`**:内层循环,`j` 从 0 到 `m-1`,共循环 `m` 次,代表每一列。 7. **`if (j == m - 1)`**:判断当前列是否为最后一列(因为 `j` 从 0 开始,所以最后一列索引是 `m-1`)。 8. **`cout << "#";` 和 `cout << "*";`**:根据条件输出对应的字符。 9. **`cout << endl;`**:每行结束后换行。 ## 🔍 输入输出示例验证 **输入:** ``` 3 4 ``` **执行过程:** - 第1行:列0->`*`,列1->`*`,列2->`*`,列3->`#` → `***#` - 第2行:列0->`*`,列1->`*`,列2->`*`,列3->`#` → `***#` - 第3行:列0->`*`,列1->`*`,列2->`*`,列3->`#` → `***#` **输出:** ``` ***# ***# ***# ``` ## 💡 进阶建议 1. **代码健壮性**:可以增加对输入内容的合法性检查,例如 `n` 和 `m` 必须为正整数。 2. **性能优化**:对于特别大的矩阵(比如 `n=10000, m=10000`),可以使用 `std::ios::sync_with_stdio(false);` 和 `cin.tie(NULL);` 来加速输入输出。 3. **扩展功能**:如果需要更复杂的模式,可以将判断条件抽象成一个函数,方便修改规则。例如: ```cpp char getCharAt(int row, int col, int m) { if (col == m - 1) return '#'; return '*'; } ``` 4. **常见陷阱**: - 忘记换行会导致输出挤在一行。 - 循环条件写错(比如 `<=` 导致多输出一行或一列)。 - 最后一列的判断条件写错(如 `j == m` 而不是 `j == m-1`,因为数组索引从0开始)。 ## 📚 学习资源推荐 - **官方文档**:[cplusplus.com - iostream](http://www.cplusplus.com/reference/iostream/) - **入门书籍**:《C++ Primer》(第5版)- 经典C++入门书籍 - **在线练习**:LeetCode、Codeforces、洛谷(Luogu)上的基础题 --- ######[AI写代码神器 | 1150点数解答 | 2026-05-30 21:53:44]
- C++ 实现:轻松计算两个矩阵的乘法并输出结果(字节豆包 | 381点数解答 | 2025-12-03 19:20:23)162
- C++ 循环解法:轻松求分子序列前 n 项之和(字节豆包 | 560点数解答 | 2025-07-29 10:02:21)101
- Python 求解小火龙正整数序列中等差数列整数对个数问题(字节豆包 | 227点数解答 | 2025-02-04 13:34:48)200
- C++ 求解小火龙正整数序列中等差数列整数对个数问题及代码示例(字节豆包 | 373点数解答 | 2025-02-04 13:35:22)201
- 50 分判断题大揭秘:变量、条件、循环与数组知识正误辨析(字节豆包 | 229点数解答 | 2025-12-21 19:15:16)87
- 怪象:a 为 3、b 为 5 时 “a == 3 && b == 5” 竟不成立! (DeepSeek | 81点数解答 | 2026-02-08 19:59:20)42
- C++实现自动化药房配药检查功能(字节豆包 | 701点数解答 | 2026-03-08 10:23:41)39
- Python 实现:根据规则判定 2^n×2^n 方阵中作弊者的赦免命运(字节豆包 | 247点数解答 | 2024-11-03 10:30:46)215
- C语言实现:解决2ⁿ×2ⁿ方阵作弊者赦免问题(字节豆包 | 370点数解答 | 2024-11-03 10:31:31)232
- C语言递归破解2ⁿ×2ⁿ作弊者赦免难题,输出01命运矩阵!(百度文心 | 792点数解答 | 2024-11-03 10:36:04)300
- 月赛作弊者命运裁决:2^n×2^n 方阵赦免递归算法揭秘(DeepSeek | 483点数解答 | 2026-01-05 12:24:54)65
- Python 实现:计算用户输入 n x n 矩阵边界元素之和(GPT | 319点数解答 | 2024-11-21 00:16:05)153