您的当前位置:首页正文

E45.【C语言】热心网友供题:打印数字金字塔

来源:九壹网


1.题目

2.自解

分析

题目说的每一行都有7个字符其实不准确,如果加上\n则每行有8个字符

非数字和\n的地方为空格


外循环控制行,内循环负责打印四个部分:红、橙、绿和蓝

红色区域的打印

第一行打印3个空格;第二行打印2个空格;第三行打印1个空格;第四行打印0个空格;

因此可以写出

        for (space = 4 - line; space > 0; space--)
            printf(" ");

橙色区域的打印

注意:不要想着怎么单独打印数字和数字之间的空格,处理起来会非常麻烦

因此循环一次,打印一个数字和一个空格

第一行打印(一个数字和一个空格)*1;第二行打印(一个数字和一个空格)*2;

第三行打印(一个数字和一个空格)*3;第四行打印(一个数字和一个空格)*4.

发现*1,*2,*3,*4跟随行数line

因此可以写出

        for (pra = 1; pra <= line; pra++)
        {
            printf("%d ", a[++k]);
        }

注意:在打印的同时还要调整下标:a[++k]

绿色区域的打印

第一行打印2个空格;第二行打印1个空格;第三行打印0个空格;第四行打印0个空格;

因此可以写出

        for (space = 4 - line; space > 1; space--)
            printf(" ");

line==3或line==4时,上述循环根本不进行

蓝色区域的打印

内层的三个循环结束后再补一个\n即可

因此可以写出

        printf("\n");

代码

不用动脑筋的代码
#include<stdio.h>
int main()
{
    int a[10], i;
    for (i = 0; i <= 9; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("   %d   \n", a[0]);
    printf("  %d %d  \n", a[1], a[2]);
    printf(" %d %d %d \n", a[3], a[4], a[5]);
    printf("%d %d %d %d\n", a[6], a[7], a[8], a[9], a[10]);

    return 0;
}
能锻炼思维的代码
#include<stdio.h>
int main()
{
    int a[10], i=0, k=-1, line=0, space=0, pra=0;

    for (i = 0; i <= 9; i++)
    {
        scanf("%d", &a[i]);
    }

    for (line = 1; line <= 4; line++)
    {
        for (space = 4 - line; space > 0; space--)
            printf(" ");
        for (pra = 1; pra <= line; pra++)
        {
            printf("%d ", a[++k]);
        }
        for (space = 4 - line; space > 1; space--)
            printf(" ");
        printf("\n");
    }
}

注:pra的全称:print a(打印数组a)

因篇幅问题不能全部显示,请点此查看更多更全内容

Top