如何在不使用条件语句的情况下打印侧金字塔?
只用两个for循环实现侧金字塔(无条件语句)
嘿,这个需求完全可以实现!不用条件语句,靠数学计算就能搞定每行要打印的字符数,直接用两个for循环就够了。
思路解析
咱们先拆解目标图案的字符数规律:
- 第1行(索引0):1个O
- 第2行(索引1):2个O
- 第3行(索引2):3个O
- 第4行(索引3):4个O(峰值)
- 第5行(索引4):3个O
- 第6行(索引5):2个O
- 第7行(索引6):1个O
发现没?每行的字符数 = 峰值字符数 - 当前行与峰值行的距离绝对值。峰值行是索引3,峰值字符数是4,所以公式就是:4 - abs(i - 3),用这个公式就能直接算出每行该打多少个O,完全不需要if判断。
改进后的代码
#include <iostream> #include <cstdlib> // 用于std::abs int main() { char character = 'O'; // 直接用字符字面量比ASCII码79更直观 const int total_lines = 7; const int peak_index = 3; // 峰值所在的行索引(从0开始计数) const int max_char_count = 4; // 外层循环控制行数 for (int i = 0; i < total_lines; ++i) { // 计算当前行需要打印的字符数,无任何条件判断 int char_count = max_char_count - std::abs(i - peak_index); // 内层循环打印对应数量的字符 for (int j = 0; j < char_count; ++j) { std::cout << character; } // 换行 std::cout << std::endl; } return 0; }
为什么这个方案更优?
- 完全去掉了条件语句,逻辑简洁直观,一眼就能看懂每行字符数的计算规则
- 用常量定义关键参数(总行数、峰值位置、最大字符数),后续要调整图案大小(比如改成更高的金字塔)只需要修改这几个常量就行,维护性更强
- 相比你原来的代码,去掉了temp变量的复杂逻辑,减少了出错的可能
内容的提问来源于stack exchange,提问作者me22x
相关产品推荐
相关产品推荐

