CS50作业问题:左对齐金字塔重复打印的修复方案咨询
修复左对齐金字塔重复打印的问题
问题根源在于main函数里的嵌套循环:你在外层循环(j从0到n-1)里又套了一层i循环,这导致print_row被调用了n×n次。输入高度3时,就是3×3=9次调用,相当于完整打印了3遍金字塔。
修复后的main函数代码
int main(void) { int n = get_height(); // 只需要一层循环,每次循环对应金字塔的一行 for (int j = 0; j < n; j++) { // 第j行(从0开始)的空格数是n - j - 1,砖块数是j + 1 print_row(n - j - 1, j + 1); } }
修复逻辑说明
- 去掉内层的i循环,因为我们只需要为金字塔的每一行调用一次
print_row - 对于第j行(从0开始计数):
- 空格数 = 总高度n - 当前行的砖块数 - 1 →
n - j - 1 - 砖块数 = 当前行的行数(从1开始)→
j + 1
- 空格数 = 总高度n - 当前行的砖块数 - 1 →
- 这样循环n次,刚好打印出n行,对应高度为n的左对齐金字塔
你的get_height和print_row函数是没问题的,只需要修改main函数里的循环结构就行。
内容的提问来源于stack exchange,提问作者r0uthy
相关产品推荐
相关产品推荐

