【问题标题】:How do I format this nested for loop pyramid to look like how I need it to?如何格式化这个嵌套的 for 循环金字塔看起来像我需要的那样?
【发布时间】:2021-04-10 14:00:48
【问题描述】:

我正在练习嵌套 for 循环练习,并想制作一个打印如下内容的程序:

How many rows do you want?: 4
    0
   000
  00000
 0000000

到目前为止,这是我的程序:

#include <stdio.h>

int main(void) {
  int x;

  printf("How many rows do you want in the pyramid? (newlines included): ");
  scanf("%d", &x);

  for (int i = 1; i <= x; i++) {
    printf("\t");
    for (int j = 1; j <= i; j++) {
      if (i % 2 == 0) {
        break;
      }
      printf("0");
    }
    printf("\n");
  }
  return 0;
}                                                                   

我的代码像我希望的那样工作,但它输出的金字塔是这样的:

How many rows do you want in the pyramid? (newlines included): 6
0

000

00000

如何将其格式化为看起来像一个实际的金字塔而不是像现在这样的直角三角形?我也知道还有其他方法可以做到这一点,但我尝试在这个练习中运用我的创造力。

【问题讨论】:

  • 空白行是因为你用if (i % 2 == 0) { break; }跳过了隔行除此之外你需要在每行打印一些前导空格,并计算所需的0字符数。
  • 这里有一个提示:首先使用_x 等可打印字符代替空格。它们更容易计数,更容易看到您在哪里打印或没有打印您需要的东西。
  • 另一个提示:计算0 的数量和每一行的空格。这些数字与行号有何关系?

标签: c nested-loops


【解决方案1】:

您无需跳过行来打印奇数个零。使用2*i+1

2*i 永远是偶数,所以2*i+1 永远是奇数。

现在您只需要在打印零之前添加空格。为此,您使用另一个循环,该循环随着i 的增大而打印更少的空间。您可以使用条件x-i

#include <stdio.h>

int main(void)
{

    int x;

    printf("How many rows do you want in the pyramid? (newlines included):\n");
    scanf("%d", &x);

    for (int i = 0; i < x; i++) {

        for (int j = 1; j < x-i; j++) {
            printf(" ");
        }
        
        for (int j = 0; j < 2*i+1; j++) {
            printf("0");
        }
        printf("\n");
    }
    return 0;
}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多