酷代码 AI
菜单
服务商

C++ 输出奇数行中间为#的n×n字符图案

根据描述,这道题要求输出一个 **n×n** 的矩形图案(n 为奇数)。 - **中间一行**(即第 `(n+1)/2` 行)全部打印 `#` - 其余行全部打印 `*` --- ## 🧩 分析与思路 1. **输入**:一个奇数整数 `n` 2. **行坐标**:从 0 到 n-1(或 1 到 n),**中间行索引** = `n/2`(整数除法,0‑based) 或 `(n+1)/2`(1‑based) 3. **打印逻辑**: - 如果当前行 == 中间行 → 输出 `n` 个 `#` - 否则 → 输出 `n` 个 `*` --- ## 🧑‍💻 C++ 实现 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 读取 n(保证为奇数) int mid = n / 2; // 中间行下标(0-based) for (int i = 0; i < n; ++i) { char ch = (i == mid) ? '#' : '*'; // 中间行用 '#',其他用 '*' for (int j = 0; j < n; ++j) { cout << ch; } cout << endl; // 每行结束后换行 } return 0; } ``` --- ## 📌 关键点说明 | 部分 | 说明 | |------|------| | `n / 2` | 整数除法,当 n=5 时结果为 2(第3行,0‑based) | | `(i == mid)` | 判断是否为中间行 | | `cout << ch` | 重复输出同一字符 n 次 | | `endl` | 换行并刷新缓冲区(也可用 `"\n"` 提高性能) | --- ## ⚡ 优化建议 1. **避免重复循环输出字符**:可用 `string(n, ch)` 简化: ```cpp for (int i = 0; i < n; ++i) { char ch = (i == mid) ? '#' : '*'; cout << string(n, ch) << "\n"; } ``` 2. **使用 `"\n"` 代替 `endl`**:在大量输出时减少刷新开销 3. **不使用额外变量 mid**:可直接在条件中计算 `n/2` --- ## 🧪 测试样例验证 输入 `5`: ``` ***** ***** ##### ***** ***** ``` 符合题意 ✅ --- ## ⚠️ 常见陷阱 - 错误计算中间行索引(例如使用 `n/2` 但未注意 0‑based vs 1‑based) - 忘记输出换行,导致所有字符挤在一行 - 输入用 `cin` 但未考虑多组输入(此题仅单组) --- ## 🔧 扩展:更通用版本(适用于任意 n,奇数时中间行为 #) ```cpp #include <iostream> #include <string> using namespace std; int main() { int n; cin >> n; int mid = n / 2; for (int i = 0; i < n; ++i) { cout << string(n, (i == mid) ? '#' : '*') << "\n"; } return 0; } ``` --- ######[AI写代码神器 | 802点数解答 | 2026-05-23 21:58:38]

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