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

CS50 Pset1 Mario More代码右侧金字塔#号过多问题求助

CS50 Mario More问题:右侧金字塔#数量异常修复

我卡CS50的Mario More问题好一阵了,始终没搞定。右侧金字塔的#号总是比预期多很多,贴出我的代码求帮忙:

#include <cs50.h>
#include <stdio.h>
int h;
int k;
int j;
int main(void){
    while (h<=0 || h>8)
    {
        h = get_int ("input pyramid height:");
    }
    for(j=0; j<h; j++)
    {
        for( k=0; k<=h; k++)
        {
            if (j+k<h)
                printf(" ");
            else
                printf("#");
        }
        printf("  ");
        for (int x=0; x<=j; x++)
        {
            for (int y=0; y<=x; y++)
                printf("#");
        }
        printf("\n");
    }
}

当height=4时,预期输出:

#  #
  ##  ##
 ###  ###
####  ####

实际输出:

#  #
  ##  ###
 ###  ######
####  ##########

问题原因

右侧金字塔用了两层嵌套循环(x和y),导致每一行的#号是累加计算的:比如第2行(j=1)会输出1+2=3个#,第3行(j=2)输出1+2+3=6个#,完全不符合每行需要j+1个#的要求。

修复代码

把右侧的嵌套循环改成单层循环,直接输出对应数量的#即可:

#include <cs50.h>
#include <stdio.h>
int h;
int k;
int j;
int main(void){
    while (h<=0 || h>8)
    {
        h = get_int ("input pyramid height:");
    }
    for(j=0; j<h; j++)
    {
        // 左侧金字塔(空格+#)
        for( k=0; k<=h; k++)
        {
            if (j+k<h)
                printf(" ");
            else
                printf("#");
        }
        printf("  ");
        // 修复后的右侧金字塔:单层循环输出j+1个#
        for (int x=0; x<=j; x++)
        {
            printf("#");
        }
        printf("\n");
    }
}

修复后运行height=4,就能得到符合要求的输出。

内容的提问来源于stack exchange,提问作者clarencebutterbroom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:40:38