弗洛伊德三角右图案

时间:2019-10-28 14:44:04

标签: c

我必须创建一个程序,要求用户输入许多行,然后创建一个floyd三角形。问题是我似乎没有设法做出这种特殊模式:

      1
    2 3
  4 5 6
7 8 9 10

我只能创建基本程序

#include <stdio.h>
#include <stdlib.h>

int rows, r, c, a;
int number=1;

int main()
{

    printf("Floyd Triangle\n");
    printf("--------------");
    printf("\nPlease enter an integer number of rows: ");
    scanf("%d",&rows);
    while(rows<=0)
    {
      printf("\nYou must enter an integer value: ");
      scanf("%d",&rows);
    }

    for(r=1;r<=rows;r++)
    {
      for(c=1;c<=r;+c++)
      {
       printf("%d ", number++);
      }
      printf("\n");
    }

到目前为止,我的代码中没有错误

2 个答案:

答案 0 :(得分:0)

只需在每行的第一个数字之前打印一些空格

    // ...
    for (r = 0; r < rows; r++) {
        printsomespaces(r, rows); // prints some spaces depending on current row and total rows
        for (c = 0; c < r; +c++) {
            printf("%d ", number++);
        }
        printf("\n");
    }
    // ...

如果您不能编写自己的函数(无printsomespaces),请使用循环:

        //...
        //printsomespaces(r, rows);
        for (int space = 0; space < XXXXXXXX; space++) putchar(' ');
        //...

其中XXXXXXXX是使用rrows进行的计算。
尝试(未经测试)2 * (rows - r)(2是每个数字的宽度:1代表数字+ 1代表空格)。

答案 1 :(得分:0)

  

我还没有学会如何实现自己的功能。没有办法仅通过使用循环来完成此操作吗?

有。此练习的主要问题是计算每列所需的宽度,这当然取决于底行中的数字。可以通过多种方式确定数字的位数。也许最简单的方法是通过snprintf(char *s, size_t n, const char *format, ...)函数,

  

…返回将要写入的字符数   n是否足够大...

     

如果n为零,则不会写入任何内容,   并且s可以为空指针。

    // we need to compute the width the of widest number of each column
    int width[rows];
    const int max = rows*(rows+1)/2;    // the greatest number
    for (c=1; c<=rows; ++c) // see how many characters will be written
        width[c-1] = snprintf(NULL, 0, "%d ", max-rows+c);
    for (r=1; r<=rows; ++r, puts(""))
        for (c=1; c<=rows; ++c)
            if (c <= rows-r)    // here comes an empty cell in this row
                printf("%-*c", width[c-1], ' ');
            else
                printf("%-*d", width[c-1], number++);