#C语言——刷题攻略:牛客编程入门训练(十三):循环输出图形(二)、一维数组(一),轻松拿捏!
🌟菜鸟主页:@晨非辰的主页
👀学习专栏:《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语言——刷题攻略:牛客编程入门训练(十二):攻克 循环控制(四)、循环输出图形(一),轻松拿捏!
结语:本篇文章就到此结束了,本文主要是练习部分循环控制以及输出图形题目,后续的题目练习难度会慢慢上来,但总体来说不会太难,喜欢的朋友们,一起来学习吧!欢迎三连~