You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:13