编写基本的半金字塔图案程序

时间:2019-07-03 15:26:17

标签: c loops for-loop while-loop do-while

尝试了一些基本模式

试图获取图案

1
2 4
3 6 12
4 8 16 32

到目前为止,我一直试图找到合适的序列,我的想法是需要另一个变量让我们说num,并且需要为num创建序列以最终打印num

#include <stdio.h>
int main()
{
    int rows = 0  , i, j , num,num2;


   do{
        printf("please enter the number of rows: ");
       scanf("%d",&rows);
    }while(rows <=2 );
    printf("printing a half pyramid of %d rows", rows);
    printf("\n");
     for( i = 1; i <=rows; ++i) {
        for (j = 1; j <= i; ++j ) {

            printf("%d ",  );


        }
       printf("\n");

    }
    return 0;
}

无法弄清楚顺序

4 个答案:

答案 0 :(得分:2)

从字面上看,您得到的代码包含所有必要的部分。您剩下的就是在嵌套循环内填写以下行:

printf("%d ", ‹what goes here?›);

要找到答案,您需要找到该值与当前行和列的关系(分别给出ij)。

您不需要其他变量num(很明显,您可以 创建一个变量,但不必解决此问题)。

答案 1 :(得分:1)

我们,初学者,应该互相帮助。:)

您在这里。

#include <stdio.h>

int main(void) 
{
    while ( 1 )
    {
        const unsigned int Base = 10;

        printf( "Enter the height of a pyramid (0 - exit): " );

        unsigned int n;

        if ( ( scanf( "%u", &n ) != 1 ) || ( n == 0 ) ) break;

        int width = 0;
        unsigned int tmp = n * n;

        do { ++width; } while ( tmp /= Base );

        putchar( '\n' );

        for ( unsigned int i = 0; i < n; i++ )
        {
            unsigned int value = i + 1;
            for ( unsigned int j = 0; j++ <= i; )
            {
                printf( "%*u ", width, value * j );
            }
            putchar( '\n' );
        }

        putchar( '\n' );
    }

    return 0;
}

程序输出看起来像

Enter the height of a pyramid (0 - exit): 1

1 

Enter the height of a pyramid (0 - exit): 2

1 
2 4 

Enter the height of a pyramid (0 - exit): 3

1 
2 4 
3 6 9 

Enter the height of a pyramid (0 - exit): 4

 1 
 2  4 
 3  6  9 
 4  8 12 16 

Enter the height of a pyramid (0 - exit): 5

 1 
 2  4 
 3  6  9 
 4  8 12 16 
 5 10 15 20 25 

Enter the height of a pyramid (0 - exit): 6

 1 
 2  4 
 3  6  9 
 4  8 12 16 
 5 10 15 20 25 
 6 12 18 24 30 36 

Enter the height of a pyramid (0 - exit): 7

 1 
 2  4 
 3  6  9 
 4  8 12 16 
 5 10 15 20 25 
 6 12 18 24 30 36 
 7 14 21 28 35 42 49 

Enter the height of a pyramid (0 - exit): 8

 1 
 2  4 
 3  6  9 
 4  8 12 16 
 5 10 15 20 25 
 6 12 18 24 30 36 
 7 14 21 28 35 42 49 
 8 16 24 32 40 48 56 64 

Enter the height of a pyramid (0 - exit): 9

 1 
 2  4 
 3  6  9 
 4  8 12 16 
 5 10 15 20 25 
 6 12 18 24 30 36 
 7 14 21 28 35 42 49 
 8 16 24 32 40 48 56 64 
 9 18 27 36 45 54 63 72 81 

Enter the height of a pyramid (0 - exit): 0

程序中的循环也可以看起来像

for ( unsigned int i = 0; i++ < n;  )
{
    unsigned int value = i;
    for ( unsigned int j = 0; j < i; j++ )
    {
        printf( "%*u ", width, value );
        value += i;
    }
    putchar( '\n' );
}

,或者不引入中间变量value之类的

for ( unsigned int i = 0; i < n; i++ )
{
    for ( unsigned int j = 0; j++ <= i; )
    {
        printf( "%*u ", width, j * ( i + 1 ) );
    }
    putchar( '\n' );
}

您自己可以向程序添加n * n不大于UINT_MAX的检查。

编辑:当您更改模式中显示的值时,程序可以例如通过以下方式查找

#include <stdio.h>
#include <math.h>

int main(void) 
{
    while ( 1 )
    {
        const unsigned int Base = 10;

        printf( "Enter the height of a pyramid (0 - exit): " );

        unsigned int n;

        if ( ( scanf( "%u", &n ) != 1 ) || ( n == 0 ) ) break;

        int width = 0;
        unsigned long long int tmp = n * ( long long unsigned )pow( 2, ( n - 1 ) );

        do { ++width; } while ( tmp /= Base );

        putchar( '\n' );

        for ( unsigned int i = 0; i++ < n;  )
        {
            unsigned int value = i;
            for ( unsigned int j = 0; j < i; j++ )
            {
                printf( "%*u ", width, value );
                value *= 2;
            }
            putchar( '\n' );
        }

        putchar( '\n' );
    }

    return 0;
}

程序输出看起来像

Enter the height of a pyramid (0 - exit): 10

   1 
   2    4 
   3    6   12 
   4    8   16   32 
   5   10   20   40   80 
   6   12   24   48   96  192 
   7   14   28   56  112  224  448 
   8   16   32   64  128  256  512 1024 
   9   18   36   72  144  288  576 1152 2304 
  10   20   40   80  160  320  640 1280 2560 5120 

Enter the height of a pyramid (0 - exit): 0

答案 2 :(得分:0)

现在应该获得的图案应该是

1
2 4
3 6 12
4 8 16 32

内部printf(),如果问题可能应该是:

printf("%d ", i<<(j-1) );

因为每行似乎包含row*2**(column-1)(从1开始计数)。

乘以2的幂被简单地替换为向高位的移位。

答案 3 :(得分:0)

棘手的图案。这是实现该模式的逻辑。 “ n”是行数。

#include <stdio.h>
int main(void) {
int n = 4;
    for(int i=1; i<=n; i++) {
        int k=i;
        printf("%d%s",k," ");
        for(int j=1; j<i; j++) {
            k = k*2;
            printf("%d%s",k," ");
        }
        printf("\n");
    }
    return 0;
}