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
相关产品推荐
相关产品推荐

