如何使用1循环在C中打印等边三角形?

时间:2019-07-16 14:36:36

标签: c printf

我想以等边形式打印序列***********

使用C中的单个循环对给定输入n(此处为5)进行输入。

#include<stdio.h>

我使用普通方法尝试了一下,其中使用一个外循环和一个内循环打印相应的元素。现在,我的目标是通过使用1循环来减少时间复杂度。

for(int i=n;i>0;i--)
{
    for(int j=0;j<n-i;j++)
    printf(" ");

    for(int j=0;j<i;j++)
    {
        printf("* ");
    }
    printf("\n");
}

3 个答案:

答案 0 :(得分:0)

您可以尝试

#include <stdio.h>

int main()
{
    int i, j, rows;

    /* Input number of rows to print */
    printf("Enter number of rows : ");
    scanf("%d", &rows);

    /* Iterate through rows */
    for(i=1; i<=rows; i++)
    { 
        /* Print leading spaces */
        for(j=i; j<rows; j++)
        {
            printf(" ");
        }

        /* Print star */
        for(j=1; j<=(2*i-1); j++)
        {
            printf("*");
        }

        /* Move to next line */
        printf("\n");
    }

    return 0;
}

输出

Enter number of rows: 5
    *
   ***
  *****
 *******
*********

答案 1 :(得分:0)

可以使用width和precision字段。星号允许在调用printf时包含一个参数。

#include <stdio.h>

#define SIZE 20

int main( void) {
    char asterisk[SIZE * 2 + 2] = "*****************************************";
    char input[SIZE] = "";
    int repeat = 0;
    int result = 0;

    do {
        printf ( "enter the number of lines to print [1 to %d]\n", SIZE);
        if ( fgets ( input, sizeof input, stdin)) {//get a line
            result = sscanf ( input, "%d", &repeat);//try to scan an integer
        }
        else {
            fprintf ( stderr, "fgets EOF\n");
            return 0;
        }
    } while ( 1 != result || repeat <= 0 || repeat > SIZE);

    for ( int each = 0; each < repeat; ++each) {
        printf ( "%*.*s\n", repeat + each, each * 2 + 1, asterisk);
    }

    return 0;
}

答案 2 :(得分:0)

是的,您可以使用不可读的单循环(可测试的HERE)。

<div class="flex-container">
  <div class="item-1">1</div>
  <div class="item-2">2</div>
  <div class="item-3">3</div>
  <div class="item2half">2.5</div>
  <div class="item-4">4</div>
</div>

是否值得付出痛苦是值得怀疑的。我会拒绝。