牛客棱形图案的打印

前言

哈喽,各位小伙伴们大家好!今天小编给大家带来打印菱形图案题目的思路分析和讲解。这道题需要经过观察规律进行分析才能解题。可以提升我们的思维和观察能力。话不多说,咱们进入主题!

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。

输入描述:

多组输入,一个整数(2~20)。

输出描述:

针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。

思路分析

类似的图案打印问题我们都可以用两层循环嵌套来进行解答,第一次嵌套为每一行的列,第二次嵌套为每一行;如:

int main()
{
    int h = 10;//h:表示行数
    int l = 10;//l:表示列数
    int i = 0;
    for (i = 0; i < h; i++)
    {
        for (int j = 0; j < l; j++)
        {
            //每一行的每一列
        }
        printf("\n");//换行
    }

    return 0;
}

其中h表示行数,做题时我们一般用scanf来获取;

l表示列数,做题时我们要分析每一列的关系,把该关系写在最内层循环里面;

printf(“\n”)是为了换行。

所以我们的关键为找到列的规律

以上思路是做图案题应该想到的思路,把图案转换成平面之间坐标系,非常的好用。

寻找规律

总体分析

通过观察我们可以发现,棱形可以分为上下两个部分,下部分就是上部分的颠倒,所以我们只需要找到上部分的规律即可求解!

上半部分分析

观察示例1上部分我们可以发现:上半部分一共有3行

                                                    第一行打2个空格,然后打1个*;

                                                    第二行打1个空格,然后打2个*;

                                                    第三行打0个空格,然后打3个*

观察示例2上部分我们可以发现:上半部分一共有4行

                                                     第一行打3个空格,然后打1个*;

                                                    第二行打2个空格,然后打2个*;

                                                    第三行打1个空格,然后打3个*

                                                    第四行打0个空格,然后打4个*

所以我们得到结论:当输入n时:

                                                    上半部分一共有n+1行

                                                     第一行打n个空格,然后打1个*;

                                                    第二行打n-1个空格,然后打2个*;

                                                    第三行打n-2个空格,然后打3个*

                                                                .................

                                                    第n行打0个空格,然后打n+1个*

所以代码为

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n)

    for (int i = 0; i < n+1; i++)
     {
         for (int j = 0; j < n-i; j ++)
           {
              printf(" ");//空格的规律
           }
         for (int j = 0; j <=  i ;j++)
           {
              printf("* ");//*的规律
           }
            printf("\n");
      }
    return 0;
}

完整代码

接下来我们把上部分反转一下得到下半部分,由于题要求多组输入,所以我们要用

 while(scanf("%d",&n) != EOF)

所以总代码为

#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d",&n) != EOF)
    {
        for (int i = 0; i < n+1; i++)
        {
            for (int j = 0; j < n-i; j ++)
            {
                printf(" ");
            }
            for (int j = 0; j <=  i ;j++)
            {
                printf("* ");
            }
            printf("\n");
        }
        
        for (int i = 0; i < n; i++)
        {
            for(int j = 0; j <= i; j++)
            {
                printf(" ");
            }
            for (int j = 0; j < n-i;j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    
    
    return 0;

结语

本次分享就到这里啦,欢迎大家来挑战

牛客:棱形图案

最后球球点点关注

  • 37
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值