飞道的博客

大年初二、初三—— 牛客网刷题经验分享~

541人阅读  评论(0)

大年初初二、初三 —— 牛客网刷题经验分享~😎)

   
😎博客昵称:博客小梦~
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,给大家分享牛客网刷题分享~昨天和今天做的题目是循环输出图形,主要是利用到循环等相关的知识。对于简单的题目,我只是点一下思路,对难的题目都做了详细的分析。精彩的难题在最后面哟!都是精华内容,可不要错过哟!!!😍😍😍

牛客网——基础语法【循环输出图形篇】🙌

BC98 线段图案 🙌

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的线段图案。
输入描述:
多组输入,一个整数(1~100),表示线段长度,即“
”的数量。
输出描述:
针对每行输入,输出占一行,用“*”组成的对应长度的线段。

解题思路分析~ 😍
主要是对于循环的合理运用,这道题目比较简单,用一个for循环控制好每一行输出 * 的个数即可。

解题代码分享: 😍

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

BC99 正方形图案 🙌

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的正方形图案。
输入描述:
多组输入,一个整数(1~20),表示正方形的长度,也表示输出行数。
输出描述:
针对每行输入,输出用“
”组成的对应边长的正方形,每个“*”后面有一个空格。

解题思路分析~ 😍
主要是对于循环的合理运用,这道题目比较简单,用两个for循环控制好每一行输出 * 的个数即可。

解题代码分享: 😍

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

 

BC100 直角三角形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的直角三角形图案。
输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“
”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“”组成的对应长度的直角三角形,每个“”后面有一个空格。

解题思路分析~ 😍
主要是对于循环的合理运用,这道题目相对比较简单,用一个for循环控制打印的行数,第二个循环控制的是每一行 * 的个数,条件为 j < i。

解题代码分享: 😍

#include <stdio.h>

int main()
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 1; i <= n; i++)
        {
   
            for (j = 0; j < i; j++)
            {
   
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

 

BC101 翻转直角三角形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的翻转直角三角形图案。
输入描述:
多组输入,一个整数(2~20),表示翻转直角三角形直角边的长度,即“
”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“”组成的对应长度的翻转直角三角形,每个“”后面有一个空格。

解题思路分析~ 😍
主要是对于循环的合理运用,这道题目比较简单,和上一道题类似,可以类比得出循环控制的条件,然后求解。

解题代码分享: 😍

#include <stdio.h>

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

 

BC102 带空格直角三角形图案 🙌

输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“
”组成的对应长度的直角三角形,每个“*”后面有一个空格。

解题思路分析~ 😍

  • 主要是对于循环的合理运用,这道题目比较简单。对比上一道题目,这里需要控制空格打印。首先,对每一行空格数量进行分析,然后总结出循环控制表达式。同理,对 * 循环控制打印。。
  • 需要注意的是:一次循环打印的是两个空格而非一个,要和题目要求的格式保持一致。

解题代码分享: 😍

#include <stdio.h>

int main()
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 0; i < n; i++)
        {
   
            for (j = 0; j < n - 1 - i; j++)
            {
   
                printf("  ");//这里是两个空格
            }
            for (j = 0; j <= i; j++)
            {
   
                printf("* ");
            }
            printf("\n");
        }
    }

}

 

BC103 金字塔图案 🙌

**描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的金字塔图案。
输入描述:
多组输入,一个整数(2~20),表示金字塔边的长度,即“
”的数量,,也表示输出行数。
输出描述:
针对每行输入,输出用“”组成的金字塔,每个“”后面有一个空格。
**

解题思路分析~ 😍

  • 第一个for循环控制的是金字塔的层数;
  • 第二个for循环控制的是空格的打印,详细分析每一行空格的数量可以总结出:j < n - 1 - i 的循环条件。
  • 第三个for循环控制的是 * 的打印,详细分析每一行 * 的数量可以总结出:j <= i 的循环条件。

解题代码分享: 😍

#include <stdio.h>

int main()
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 0; i < n; i++)
        {
   
            for (j = 0; j < n - 1 - i; j++)
            {
   
                printf(" ");
            }
            for (j = 0; j <= i; j++)
            {
   
                printf("* ");
            }
            printf("\n");
        }
    }

}

 

BC104 翻转金字塔图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的翻转金字塔图案。
输入描述:
多组输入,一个整数(2~20),表示翻转金字塔边的长度,即“
”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“”组成的金字塔,每个“”后面有一个空格。

解题思路分析~ 😍

  • 这道题可以类比上一道题目,只是将金字塔倒置,将循环条件稍微修改即可求解~

解题代码分享: 😍

#include<stdio.h>

int main()
{
   
    int i = 0;
    int j = 0;
    int n = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for ( i = n; i >= 1; i--)
        {
   
            for (j = 0; j < n - i; j++)
            {
   
                printf(" ");
            }
            for (j = 0; j < i; j++)
            {
   
                printf("* ");
            }
            printf("\n");
        }

    }
    return 0;
}

 

BC105 菱形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的菱形图案。
输入描述:
多组输入,一个整数(2~20)。
输出描述:
针对每行输入,输出用“
”组成的菱形,每个“*”后面有一个空格。

解题思路分析~ 😍

  • 首先,看到这个图案先不要畏惧,要冷静分析,分析思路。然后我们可以发现,这个图案可以分为上下两大部分,这样比较好找规律,并用循环打印出来。
  • 整体来书还是比较简单的,可以类比金字塔解题思想,上半部分是正金字塔打印,下半部分是倒立金字塔的打印。

解题代码分享: 😍

#include<stdio.h>

int main()
{
   
    int n = 0;
    int i = 0;
    int j  = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 0; i <= n; i++)
        {
   
            for (j = 0; j < n - i; j++)
            {
   
                printf(" ");
            }
            for (j = 0; j <=i; j++)
            {
   
                printf("* ");
            }
            printf("\n");
        }
        for (i = 0; i < n; i++)
        {
   
            for (j = 0; j <= i; j++)
            {
   
                printf(" ");
            }
            for (j = 0; j < n - i; j++)
            {
   
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}


 

BC106 K形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的K形图案。
输入描述:
多组输入,一个整数(2~20)。
输出描述:
针对每行输入,输出用“
”组成的K形,每个“*”后面有一个空格。

解题思路分析~ 😍

  • 首先,是对图案做一各整体的分析和能否做一下拆解。可以发现这个图案从中间拆分为上下两个部分比较好用循环打印出来
  • 然后分别观察 每一行 * 的数量,总结出循环控制条件即可

解题代码分享: 😍

#include<stdio.h>

int main()
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 0; i <= n; i++)
        {
   
            for (j = 0; j <= n - i; j++)
            {
   
                printf("* ");
            }
            printf("\n");
        }
        for (i = 2; i < n + 2; i++)
        {
   
            for (j = 0; j < i; j++)
            {
   
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

 

BC107 箭形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的箭形图案。
输入描述:
本题多组输入,每行一个整数(2~20)。
输出描述:
针对每行输入,输出用“
”组成的箭形。

解题思路分析~ 😍

  • 这道题的难点在于,空格和 * 的打印循环条件的控制。
  • 首先还是要对图案的空格和 * 的每一行数量进行对比,找出规律,然后用表达式表示出来
  • 这里总结出行数的控制条件为: input * 2 + 1
  • 这句代码 tmp = n; 是保留n,避免n被修改。
  • 空格打印的控制条件为:(input - tmp) * 2
  • 符号打印的控制条件为:tmp + 1。

解题代码分享: 😍

#include <stdio.h>

int main() 
{
   
    int input =0;
    int n = 0;
    int i = 0;
    int j = 0;
    int tmp = 0;
    while (scanf("%d", &input) == 1) 
    {
   
        for (n = 0; n < input * 2 + 1; n++) //控制图案的行数
        {
   
            tmp = n; //保留n,避免n被修改
            if (n > input) 
            {
   
                tmp = n - (i + 2);
            }
            for (i = 0; i < (input - tmp) * 2; i++)
            {
   
                printf(" ");
            }
            for (j = 0; j < tmp + 1; j++) 
            {
   
                printf("*");
            }
            printf("\n");
        }

    }
    return 0;
}

 

BC108 反斜线形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的反斜线形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成反斜线的“
”的数量。
输出描述:
针对每行输入,输出用“*”组成的反斜线。

解题思路分析~ 😍
主要是对于循环的合理运用,这道题目比较简单。第一个循环控制的是图案的行数,第二个循环控制的是每一行空格个数。

解题代码分享: 😍

#include <stdio.h>

int main() 
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 1; i <= n; i++)
        {
   
            for (j = 1; j < i ; j++)
            {
   
                printf(" ");
            }
            printf("*\n");
        }
    }
    return 0;
}

 

BC109 正斜线形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的正斜线形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成正斜线的“
”的数量。
输出描述:
针对每行输入,输出用“*”组成的正斜线。

解题思路分析~ 😍

  • 和上一题类似,可以对比求解

解题代码分享: 😍

#include <stdio.h>

int main() 
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 1;i <= n; i++)
        {
   
            for (j = 0; j < n - i; j++)
            {
   
                printf(" ");
            }
            printf("*\n");
        }
    }
    return 0;
}

 

BC110 X形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的X形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
输出描述:
针对每行输入,输出用“
”组成的X形图案。

解题思路分析~ 😍

  • 首先是对图案整体的分析,看能不能进行拆分转化成简单的图案打印。在这里,可以将图案拆分为打印正对角线,和副对角线。
  • 然后结合循环的知识配合条件判断语句解答;
  • 主对角线打印控制条件:i == j
  • 副对角线打印控制条件:j == n - i - 1
  • 如果不满足·上述两个条件,就打印空格;

解题代码分享: 😍

#include <stdio.h>

int main() 
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 0; i < n; i++)
        {
   
            for (j = 0; j < n; j++)
            {
   
                if(i == j || j == n - i - 1)
                printf("*");
                else
                {
   
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

 

BC111 空心正方形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的“空心”正方形图案。
输入描述:
多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“
”的数量。
输出描述:
针对每行输入,输出用“”组成的“空心”正方形,每个“”后面有一个空格。

解题思路分析~ 😍

  • 这个图案的打印可以类比一个正方形边的打印,和上一道题类似,只需控制边上打印为 * 号,其余则打印空格即可。
  • 打印 * 号的条件为i == 0 || i == n - 1 || j == 0 || j == n - 1
  • 不满足上述条件的打印空格即可。
  • 这里打印一次空格是打印两个空格,需要跟题目的输出格式保持一致。

解题代码分享: 😍

#include <stdio.h>

int main() 
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 0; i < n; i++)
        {
   
            for (j = 0; j < n; j++)
            {
   
                if( i == 0 || i == n - 1 || j == 0 || j == n - 1)
                {
   
                    printf("* ");
                }
                else
                {
   
                    printf("  ");//打印的是两个空格
                }
            }
            printf("\n");
        }
    }
}

 

BC112 空心三角形图案 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的“空心”三角形图案。
输入描述:
多组输入,一个整数(3~20),表示输出的行数,也表示组成三角形边的“
”的数量。
输出描述:
针对每行输入,输出用“”组成的“空心”三角形,每个“”后面有一个空格。

解题思路分析~ 😍

  • 这个图案的打印可以类比一个直角三角形边的打印,和上一道题类似,只需控制边上打印为 * 号,其余则打印空格即可。
  • 打印 * 号的条件为i == j || i == n - 1 || j == 0
  • 不满足上述条件的打印空格即可。
  • 这里打印一次空格是打印两个空格,需要跟题目的输出格式保持一致。

解题代码分享: 😍

#include <stdio.h>

int main() 
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 0; i < n; i++)
        {
   
            for (j = 0; j < n; j++)
            {
   
                if(i == j || i == n - 1 || j == 0)
                printf("* ");
                else
                printf("  ");//打印两个空格
            }
            printf("\n");
        }
    }
}

 

BC113 数字三角形 🙌

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用数字组成的数字三角形图案。
输入描述:
多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。
输出描述:
针对每行输入,输出用数字组成的对应长度的数字三角形,每个数字后面有一个空格。

解题思路分析~ 😍

  • 这里也是利用两层循环来解决,第一层循环控制图案的层数,第二层循环控制每一行数字的打印输出。
  • 仔细分析数字打印的规律可以看出,总结出控制条件为:j <= i;

解题代码分享: 😍

#include <stdio.h>

int main() 
{
   
    int n = 0;
    int i = 0;
    int j = 0;
    while(scanf("%d",&n) == 1)
    {
   
        for (i = 1; i <= n; i++)
        {
   
            for (j = 1; j <= i; j++)
            {
   
                printf("%d ",j);
            }
            printf("\n");
        }
    }
    return 0;
}

 

BC114 圣诞树 🙌

描述
今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。
输入描述:
输入圣诞树的高度h,1<=h<=1001<=h<=100
输出描述:
输出对应的圣诞树

解题思路分析~ 😍

  • 主要是对于循环的合理运用,这道题目比较简单,用一个for循环控制好每一行输出 * 的个数即可。
  • 首先是对圣诞树树叶层的控制打印,首先控制的是树叶层的高度,然后控制打印树叶层中三角形图案的个数打印。控制条件为: j <= (i + 2) / 3
  • 然后是对第一行空格的控制,如果是第一行就循环打印空格,一次打印三个,循环控制条件为:k <= h - ((i + 2) / 3)
  • 然后是对小金字塔状的图案的每一层进行控制打印。
  • 最后是打印圣诞树的树干。
  • 空格控制条件为:m <= 3 * h - 1
  • 号打印的控制条件为:i <= h

解题代码分享: 😍


#include<stdio.h>
int main(void)
{
   
    int h = 0;
    scanf("%d", &h);
    //打印圣诞树的树叶层
    for (int i = 1; i <= 3 * h; i++) //表示打印树叶层的高度
    {
   
        for (int j = 1; j <= (i + 2) / 3; j++) //控制打印的树层三角形状个数
        {
   
            if (j == 1)//第一行空格的控制
            {
   
                for (int k = 1; k <= h - ((i + 2) / 3); k++)
                {
   
                    printf("   ");//一次循环打印三个空格
                }
            }
            if (i % 3 == 1)
            {
   
                printf("  *   ");//左边两个空格,*,右边三个空格
            }
            else if (i % 3 == 2)
            {
   
                printf(" * *  ");//左边一个空格,* *,右边两个空格
            }
            else
            {
   
                printf("* * * ");//* * *,右边一个空格
            }
        }
        printf("\n");
    }
    //打印圣诞树的主干
    for (int i = 1; i <= h; i++) 
    {
   
        for (int m = 1; m <= 3 * h - 1; m++)// 控制每一行空格个数
        {
   
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}

 

总结撒花💞

   本篇文章旨在分享牛客网上基础语法篇 — 循环打印图案的刷题经验。如果大家学习了C语言循环和分支语句的学习,则此文是非常适合大家阅读的,然后再亲自实践刷题,肯定会对知识的掌握更加的深刻,和新的理解~ 希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘


转载:https://blog.csdn.net/weixin_70261953/article/details/128763237
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场