#C语言——刷题攻略:牛客编程入门训练(十三):循环输出图形(二)、一维数组(一),轻松拿捏!

发布于:2025-09-13 ⋅ 阅读:(18) ⋅ 点赞:(0)

🌟菜鸟主页:@晨非辰的主页

👀学习专栏:《C语言刷题合集》

💪学习阶段:C语言方向初学者

名言欣赏:"代码行数决定你的下限,算法思维决定你的上限。"

前言:在学习编程语言的同时,千万别忘了刷刷题来巩固一下学到的知识,对于牛客网_编程入门系列,小子会持续更新分享刷题过程,其中包括一些基础板块的题目,本次将呈现7道题。

~~注意部分标题括号内代表对题目涉及到的知识进行说明!


目录

1. BC103 金字塔图案

2.  BC104 翻转金字塔图案

3.  BC105 菱形图案

4.  BC106 K形图案

5.  BC116 记数问题

6.  BC118 N个数之和(多组输入实现类加:数据存储在缓冲区)

7.  BC119 最高分与最低分之差


1. BC103 金字塔图案

链接:牛客网_BC103 金字塔图案_简单

#include <stdio.h>
int main()
{
    int a;
    while (scanf("%d", &a) != EOF)
    {
        int j = a;
        int k = 1;

        //循环行的变换--循环a行
        for (int i = 1; i <= a; i++)
        {
            //循环生成前面的空格
            for (int i = 1; i <= j - 1; i++)
            {
                printf(" ");
            }
            j--;

            //循环生成中间的'*'
            for (int i = 1; i <= k; i++)
            {
                printf("* ");
            }
            k++;
            
            //就不用管后面的空格输出
            printf("\n");

        }
    }
    return 0;
}

思路——

--本题比其他的输出图案的题目就复杂一点点,额外加上了对 ' * ' 前面空格的输出考虑;注意在对 ' *  '输出时还带着一个空格 。


2.  BC104 翻转金字塔图案

链接:牛客网_BC104 翻转金字塔图案_简单

#include <stdio.h>
int main() 
{
    int a;
    while (scanf("%d", &a) != EOF) 
    { 
        int j = 1;
        int k = a;

        //循环行的变换--循环a行
        for(int i = 1; i<= a; i++)
        {
            //循环生成前面的空格,从生成0个开始
            //需要前面空格输出的只有a - 1行,所以将初始值调高
            for(int i = 2; i <= j; i++ )
            {
                printf(" ");
            }
            j++;

            //循环生成中间的'*'
            for(int i = 1; i <= k; i++)
            {
                printf("* ");
            }
            k--;

            printf("\n");

        }
    }
    return 0;
}

思路——

--本题于上一道题的思路基本相同,由于本题图案时翻转的,需要将空格的输出进行重新定义;


3.  BC105 菱形图案

链接:牛客网_BC105 菱形图案_简单

#include <stdio.h>
int main() 
{
    int a;
    while (scanf("%d", &a) != EOF) 
    { 
        int j = a;
        int k = 1;

        //循环行的变换--循环a行
        for(int b = 1; b<= a; b++)
        {

            //循环生成前面的空格
            for(int c = 1; c <= j ; c++ )
            {
                printf(" ");
            }
            j--;

            for(int d = 1; d <= k; d++)
            {
                printf("* ");
            }    
            k++;
            printf("\n");
        }

            k = 1;//重置
            j = a;

            //中间最长的一行
            for(int i = 1; i<= a + 1 ; i++)
            {
            printf("* ");
            }
           printf("\n");

            //生成后面的行
            for(int e = 1; e <= a; e++)
            {
                //循环生成前面的空格
                for(int f = 1; f <= k; f++ )
                {
                    printf(" ");
                }
                k++;

                for(int h = 1; h <= j; h++)
                {
                    printf("* ");
                }
                j--;
                printf("\n");
            }
            
    }
    return 0;
}

思路——

--本题相当于前两个金字塔题的综合,虽然整体的思路不难,难得就在于将每个变量作用分清楚;注意需要重置部分变量的值。


4.  BC106 K形图案

链接:牛客网_BC106 K形图案_简单

#include <stdio.h>
int main() 
{
    int a;
    while (scanf("%d", &a) != EOF) 
    { 
        int i = a + 1;
        int j = 2;
        for(int b = 0; b <= a; b++)
        {
            //输出上半部分
            for(int c = 1; c <= i; c++)
            {
                printf("* ");
            }
            i--;
            printf("\n");
        }
        
        for(int e = 1; e <= a; e++)
        {
             //输出下半部分
            for(int d = 1; d <= j; d++)
            {
                printf("* ");
            }
            j++;
            printf("\n");
        }
    }
    return 0;
}

思路——

--本题的图案在前一篇刷题博客有练过,基本逻辑与上一题的综合输出题目相同,也是注意变量之间的关系,千万不要搞混啊!


5.  BC116 记数问题

链接:牛客网_BC116 记数问题_入门

#include <stdio.h>
int main()
{
    int n = 0;
    int x = 0;
    int count_x = 0;
    scanf("%d%d", &n, &x);
    for (int i = 1; i <= n; i++)
    {
        int j = i;
        //获取位数
        do
        {
            int num = j % 10;
            j /= 10;
            if (num == x)
            {
                count_x++;
            }
        } while (j);
    }
    printf("%d\n", count_x);
    return 0;
}

思路——

--不知道到大家还对之前相似的一道题有没有印象,(链接放在下面)注意要求是统计出现x的次数,与之前的题略有不同;基本想法:循环取得数值的最末位,与x进行比较,是——>计数+1,反之无。

 BC89 包含数字9的数


6.  BC118 N个数之和(多组输入实现类加:数据存储在缓冲区)

链接:牛客网_BC118 N个数之和_简单

#include <stdio.h>
int main() 
{
    int N = 0;
    int num = 0;;
    int sum = 0;
    scanf("%d", &N);
    while(scanf("%d", &num) != EOF)
    {
        sum += num;
    }
    printf("%d\n", sum);
    return 0;
}

思路——

--本题思路简单,进行多组输入实现累加因为键盘输入的数值存储在缓冲区,用1个读1个;这样也不会导致数据覆盖。


7.  BC119 最高分与最低分之差

链接:牛客网_BC119 最高分与最低分之差_简单

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[n];//变长数组
	int i = 0;
	//循环输入成绩
	for ( i = 0; i < n; i++)
	{
		scanf("%d\n", &arr[i]);
	}
	//计算最大与最小之差
	int min = arr[0];
    int max = arr[0];
	for ( i = 1; i < n; i++)
	{
		if (arr[i] < min)
			min = arr[i];
        if (arr[i] > max)
			max = arr[i];
	}
	printf("%d", max-min);
	return 0;
}

思路——

--本题的思路在之前有过相似的题目见过,但是最主要是的是使用了变长数组(大小在运行中确定--n);请注意日常使用时,变长数组在自己使用的编程软件适不适用(VS2022不支持)。


刷题系列回顾:

#C语言——刷题攻略:牛客编程入门训练(十二):攻克 循环控制(四)、循环输出图形(一),轻松拿捏!

结语:本篇文章就到此结束了,本文主要是练习部分循环控制以及输出图形题目,后续的题目练习难度会慢慢上来,但总体来说不会太难,喜欢的朋友们,一起来学习吧!欢迎三连~ 


网站公告

今日签到

点亮在社区的每一天
去签到