首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >#C语言——刷题攻略:牛客编程入门训练(十三):循环输出图形(二)、一维数组(一),轻松拿捏!

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

作者头像
雾忱星
发布2025-12-23 14:36:22
发布2025-12-23 14:36:22
2710
举报
文章被收录于专栏:C++C++

1. BC103 金字塔图案

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

代码语言:javascript
复制
#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 翻转金字塔图案_简单

代码语言:javascript
复制
#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 菱形图案_简单

代码语言:javascript
复制
#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形图案_简单

代码语言:javascript
复制
#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 记数问题_入门

代码语言:javascript
复制
#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个数之和_简单

代码语言:javascript
复制
#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 最高分与最低分之差_简单

代码语言:javascript
复制
#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语言——刷题攻略:牛客编程入门训练(十二):攻克 循环控制(四)、循环输出图形(一),轻松拿捏!

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. BC103 金字塔图案
  • 2. BC104 翻转金字塔图案
  • 3. BC105 菱形图案
  • 4. BC106 K形图案
  • 5. BC116 记数问题
  • 6. BC118 N个数之和(多组输入实现类加:数据存储在缓冲区)
  • 7. BC119 最高分与最低分之差
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档