我对通过哈佛免费CS 50课程编码和学习非常陌生.问题集1一直很困难,我认为我通过用艰难的方式做事让它变得更具挑战性,即我试图为我的代码创建函数,以适应创建函数的工作方式.任务是制作一个高度在1到8之间的左对齐 pyramid .我创建了从用户获取高度并打印 pyramid 的函数.问题在于 pyramid 如何印刷.它可以正确打印,但打印次数太多.因此,如果用户在提示输入高度时输入"3",则应该打印以下内容:

  #
 ##
###

相反,它会将确切的 pyramid 打印三次:

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

根据我下面的代码解决这个问题的解决方案是什么?

主要:

{
    int n = get_height();

    for (int j = 0; j < n; j++)
    {
        for (int i = 0; i < n; i++)
        {
            print_row(n - i - 1, i + 1);
        }
    }
}

功能:

int get_height(void)
{
    int n;
    do
    {
        n = get_int("Height: ");
    }
    while (n < 1 || n > 8);
    return n;
}

void print_row(int spaces, int bricks)
{
    // Print spaces
    for (int j = 0; j < spaces; j++)
    {
        printf(" ");
    }
    // Print bricks
    for (int i = 0; i < bricks; i++)
    {
        printf("#");
    }
    printf("\n");
}

推荐答案

for (int j = 0; j < n; j++)
    {
        for (int i = 0; i < n; i++)
        {
            print_row(n - i - 1, i + 1);
        }
    }

代码正在做什么:

  • print_row()打印一行.
  • 内循环打印n行.或者生成一个 pyramid .
  • 外循环执行n次.因此,外循环生成n个 pyramid (由于内循环生成单个 pyramid ,因此n * 1 pyramid等于n pyramids).

这就是您的代码打印 pyramid n次的方式.因为生成一次 pyramid 后,您会重复该过程,直到生成n个 pyramid .

只需删除外循环即可.

C++相关问答推荐

当我try 计算一个多项时,看到segfault.我做错了什么?

为什么内核使用扩展到前后相同的宏定义?

正确的TCP/IP数据包 struct

二进制计算器与gmp

C中函数类型的前向声明

是什么让numpy.sum比优化的(自动矢量化的)C循环更快?

如何在ASM中访问C struct 成员

在移动数组元素时获得意外输出

C堆栈(使用动态数组)realloc内存泄漏问题

为什么编译器不能简单地将数据从EDI转移到EAX?

C语言中奇怪的输出打印数组

为什么二进制文件的大小不会随着静态数据的大小而增加?

我正在使用c学习数据 struct ,在学习堆栈时,我试图将中缀转换为后缀,并编写了这段代码.代码未给出输出

如何解释数组中的*(ptr)和*(ptr+2)?

DennisM.Ritchie的C编程语言一书中关于二进制搜索的代码出现错误?

为什么<到达*时不会转换为>?

将数组中的所有元素初始化为 struct 中的相同值

C/C++编译器可以在编译过程中通过按引用传递来优化按值传递吗?

为什么写入关闭管道会返回成功

保存有符号整数结果的变量是否会溢出(后增量的副作用),并且此后从未在任何表达式中使用过它,是否会导致 UB?