首页 > 解决方案 > 在 C 中打印数字金字塔,从顶部的最高数字开始

问题描述

我已经在网站上搜索过这种金字塔和互联网,但没有找到接近它的东西,我 myslef 是编码新手,我猜 myslef 无法弄清楚。我试图修改其他代码以获得结果我想要但没有成功。

我必须制作从顶部输入的数字开始打印 piramid 的代码,然后使用以下数字逐渐扩展。

示例输入:5

输出:

    55
   4554
  345543
 23455432
1234554321

我可以做一半的金字塔问题是它的uspide down

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

int main(){
int i,j,num;
printf("number:");
scanf("%d",&num);
for(i=1;i<=num;i++){
    j=num;

    for(j;j>=i;j--){
        printf("%d",j);
    }printf("\n");


}
  return 0;
}

输出:

number:5
54321
5432
543
54
5

而对于另一半,我试图用循环中的微小变化来反映它,但我不知道如何摆脱一些数字继承该代码:

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

int main(){
int i,j,num,k;
printf("number:");
scanf("%d",&num);
for(i=1;i<=num;i++){

    for(k=1;k<=num;k++){
        printf("%d",k);
    }


    j=num;
    for(j;j>=i;j--){
        printf("%d",j);
    }printf("\n");


}
  return 0;
}

输出:

number:5
1234554321
123455432
12345543
1234554
123455

标签: cloopsfor-loopwhile-loopnested-loops

解决方案


我的五分钱。:)

#include <stdio.h>

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

        printf( "Enter a non-negative integer number less than %d (0 - exit): ",
                UPPER_LIMIT );

        int n;

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

        if ( !( n < UPPER_LIMIT ) ) n = UPPER_LIMIT - 1;

        putchar( '\n' );

        for ( int i = 0; i < n; i++ )
        {
            printf( "%*d", n - i, n - i );

            int j = n - i;
            while ( j++ != n ) putchar( '0' + j );
            while ( j-- != n - i ) putchar( '0' + j );

            putchar( '\n' );
        }

        putchar( '\n' );
    }

    return 0;
}

程序输出可能如下所示

Enter a non-negative integer number less than 10 (0 - exit): 9

        99
       8998
      789987
     67899876
    5678998765
   456789987654
  34567899876543
 2345678998765432
123456789987654321

Enter a non-negative integer number less than 10 (0 - exit): 8

       88
      7887
     678876
    56788765
   4567887654
  345678876543
 23456788765432
1234567887654321

Enter a non-negative integer number less than 10 (0 - exit): 7

      77
     6776
    567765
   45677654
  3456776543
 234567765432
12345677654321

Enter a non-negative integer number less than 10 (0 - exit): 6

     66
    5665
   456654
  34566543
 2345665432
123456654321

Enter a non-negative integer number less than 10 (0 - exit): 5

    55
   4554
  345543
 23455432
1234554321

Enter a non-negative integer number less than 10 (0 - exit): 4

   44
  3443
 234432
12344321

Enter a non-negative integer number less than 10 (0 - exit): 3

  33
 2332
123321

Enter a non-negative integer number less than 10 (0 - exit): 2

 22
1221

Enter a non-negative integer number less than 10 (0 - exit): 1

11

Enter a non-negative integer number less than 10 (0 - exit): 0

推荐阅读