酷代码 AI
菜单
服务商

C++实现小行星矩阵打印详解

好的,我们来一步步实现这个“小行星矩阵”的打印程序。 ## 🚀 问题分析 我们需要根据输入的行列数 `n`,打印一个 `n` 行 `n` 列的矩阵。矩阵的**每行**中: - **第一个**字符是金色小行星 `#` - **最后一个**字符是金色小行星 `#` - **中间的所有字符**是普通小行星 `*` 也就是说,对于每一行,我们只需要处理首尾两个特殊位置,其他位置全部填充 `*`。 --- ## 🛠️ 代码实现(C++) ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 读取矩阵的维度 // 外层循环控制行数 for (int i = 0; i < n; i++) { // 内层循环控制列数 for (int j = 0; j < n; j++) { // 判断是否为第一个或最后一个位置 if (j == 0 || j == n - 1) { cout << "#"; // 金色小行星 } else { cout << "*"; // 普通小行星 } } cout << endl; // 每行输出完毕后换行 } return 0; } ``` --- ## 📖 关键概念解释 | 元素 | 含义 | |------|------| | `if (j == 0 \|\| j == n - 1)` | 判断当前列是否为第一列(索引0)或最后一列(索引n-1) | | `cout << "#"` | 输出金色小行星 | | `cout << "*"` | 输出普通小行星 | | `cout << endl` | 每行结束后换行 | --- ## ✅ 输入输出验证 **输入样例1:** ``` 5 ``` **输出:** ``` #***# #***# #***# #***# #***# ``` **输入样例2:** ``` 3 ``` **输出:** ``` #*# #*# #*# ``` --- ## ⚡ 性能分析 - **时间复杂度**:O(n²),因为需要遍历整个 n×n 矩阵。 - **空间复杂度**:O(1),只有常数个变量。 完全满足题目要求的“1000MS/100MB”限制。 --- ## 💡 开发建议 1. **边界索引检查**:在使用 `j == 0 || j == n - 1` 时,注意 `n` 至少为 1,否则 `n-1` 会变成负数,导致逻辑错误。题目未明确说明 n 的最小值,建议在正式环境中增加 `n >= 1` 的校验。 2. **可读性优先**:即使可以一行输出所有字符,也建议保持嵌套循环结构,配合清晰的变量命名,方便后续维护。 3. **扩展思考**:如果未来需要支持不同的颜色表示(比如在终端中显示不同颜色),可以将 `#` 和 `*` 替换为带 ANSI 转义码的字符串。 4. **通用性**:这个模式可以推广到打印任何“边界特殊、内部一致”的方形矩阵,比如棋盘、窗口边框等。 --- ## 🧠 常见陷阱规避 - 陷阱:忘记控制换行,导致所有内容输出在一行。 - 解决:每行结束后使用 `cout << endl` 或 `cout << "\n"`。 - 陷阱:将索引从 1 开始计数,导致边界判断写为 `j == 1 || j == n`。 - 解决:始终从 0 开始索引,并使用 `j == 0 || j == n-1`。 - 陷阱:输入 n=1 时,首尾是同一个位置,应该只输出一个 `#`。 - 当前代码能正确处理:`0 == n-1` 成立,输出一次 `#`,内层循环结束。 --- ######[AI写代码神器 | 882点数解答 | 2026-05-30 22:02:57]

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