CS50x金字塔打印代码优化咨询:能否精简实现行数?
CS50x金字塔习题代码精简方案
兼顾可读性的精简版本
#include <cs50.h> #include <stdio.h> int main(void) { int h; do h = get_int("Height? "); while (h < 1 || h > 8); for (int r = 0; r < h; r++) { printf("%*s", h - r - 1, ""); printf("%.*s %.*s\n", r + 1, "########", r + 1, "########"); } }
精简思路说明
- 把do-while输入校验直接压缩为一行,去掉冗余的变量初始化换行
- 用
printf的格式控制符替代空格循环:%*s可以指定输出空格的宽度,无需嵌套循环 - 合并左右两侧的
#输出:利用%.*s截取固定长度的字符串,提前准备足够长的"########"(最多8个#),避免重复写两次循环 - 把间隙和换行整合到一个
printf调用中,减少代码行数的同时保持逻辑清晰
极致精简(可读性差,不推荐)
如果单纯追求最少行数,可以把所有代码压缩到一行,但牺牲了可读性:
#include <cs50.h> #include <stdio.h> int main(void){int h;do h=get_int("Height? ");while(h<1||h>8);for(int r=0;r<h;r++)printf("%*s%.*s %.*s\n",h-r-1,"",r+1,"########",r+1,"########");}
内容的提问来源于stack exchange,提问作者senitsu
相关产品推荐
相关产品推荐

