C语言实验——打印数字图形

Problem Description
从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形。
Input
正整数n(1≤n≤9)。
Output
指定数字图形。
Sample Input

5

Sample Output

1

121
12321
1234321
123454321
1234321
12321
121
1

/*5

Sample Output

    1
   121
  12321
 1234321
123454321
 1234321
  12321
   121
    1

*/
#include<stdio.h>
int main()
{
   int n,i,j;
   while((scanf("%d",&n))!=EOF)
   {
       for(i=1;i<2*n;i++)//i为第i行答案
       {
           int a=0;//每次都要将a初始化
           if(i<=n)//开始分增大与缩小
           {
             for(j=1;j<=n+i-1;j++)//这个j是关键,每一行的长度为n+i-1;
           {
               if(j<=n-i)//前n-i的值都为空格
           {
               printf(" ");
           }
               if(j>n-i)//自第三个数开始从1逐渐增加直到第n个数然后自n+1个数开始减小
           {
               if(j<=n)//在第n个数之前的值是增加的
               {
                   a++;//一定是先将a值增加再输出
                   if(j==n+i-1)//为了让第一个1也能有换行符所以这么搞
                   {
                       printf("%d\n",a);
                   }
                   else printf("%d",a);
               }
               else//第n+1个值开始增加,先将a减小,再输出
               {
                   a--;
                   if(a>1)
                   {
                       printf("%d",a);
                   }
                   else//直到通过a判断,当a==1时说明减到底了,直接break即可
                   {
                       printf("%d\n",a);
                       break;
                   }

               }
           }
           }
        }
        else //当i>n时
        {
            for(j=1;j<=3*n-i-1;j++)//让j从最大的n-1开始减小到1;
           {
           if(j<=i-n)//前i-n的值都为空格
           {
               printf(" ");
           }
           if(j>i-n)//自第i-n个数开始从1逐渐增加直到第n个数然后自n+1个数开始减小
           {
               if(j<=n)//在第n个数之前的值是增加的
               {
                   a++;//一定是先将a值增加再输出
                   if(j==3*n-i-1)//为了让第一个1也能有换行符所以这么搞
                   {
                       printf("%d\n",a);
                   }
                   else printf("%d",a);
               }
               else//第n+1个值开始减小,先将a减小,再输出
               {
                   a--;
                   if(a>1)
                   {
                       printf("%d",a);
                   }
                   else//直到通过a判断,当a==1时说明减到底了,直接break即可
                   {
                       printf("%d\n",a);
                       break;
                   }

               }
           }
           }
        }
       }

   }

return 0;
}

//这种题的点在于需要for循环和if判断的准确性,整体而言并不是很难。
整体就是先确定那些是空格,然后先令a=0,a++,再输出,否则后面a–的时候会出现问题。

  • 0
    点赞
  • 0
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值