美丽的图案

本文介绍了一个使用C语言输出特定图案的程序实现方法。通过输入一个整数n,程序能够生成并打印一个由数字构成的对称图案。文章详细展示了如何初始化数组、填充数值以及打印最终的图案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体题目要求输出一个图案,要先输入一个数n,比如输入n=2,n最大不超过9;

输出如下图案

                      0

               0    1    0

        0    1     2    1     0

               0    1    0        

                      0

分析思路:

考虑过中心的值是输入的最大值,它周围的都比它小1,对于非中心的值,可以判断如果这个数相邻的数比他大,就不变,否则就是这个数减去1后的结果,最终不知道如何实现好。所以放弃了,后来考虑先把过中心的行和列值全部赋值给一个数组相应的位置,得到了一个综合交叉的十字线,然后根据对角线上的值是一样的来确定没有填充的值,这个做到一半发现也不会了,放弃。后来想自己看到的这个图形也许实际不是这个样子的,只是选择性打印的结果,第一行只有一个0,第二行是0 1 0,两边的都是比中心的数小,而且对于一行数据,都是主次减去1直道为0,下一行的中心列的值比上一行相同位置大1,到了中间行后开始相反,要少1,最后选择大于等于0 的打印结果,否则打印空格。

#include<stdio.h>
#define MAX 9
int pic[2*MAX+1][2*MAX+1]={0};

/**
         1
         2
   0 1 2 3 2 1 0
         2
         1
         0*/
int main()
{
    int n,i,j;
    int d=0;
    scanf("%d",&n);
    for(i=MAX-n;i<=MAX+n;i++)
    {
        if(i<=MAX)
        {
            pic[i][MAX]=d++;
        }
        else
        {
            pic[i][MAX]=pic[i-1][MAX]-1;
        }
        for(j=0;j<n;j++)
        {
            pic[i][MAX-j-1]=pic[i][MAX-j]-1;
            pic[i][MAX+j+1]=pic[i][MAX+j]-1;
        }
    }
    for(i=MAX-n;i<=MAX+n;i++)
    {
        for(j=MAX-n;j<=MAX+n;j++)
        {
            if(pic[i][j]>=0)
            {
                printf("%-1d",pic[i][j]);
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值