🌟菜鸟主页:@晨非辰的主页
👀学习专栏:《C语言刷题合集》
💪学习阶段:C语言方向初学者
⏳名言欣赏:"代码行数决定你的下限,算法思维决定你的上限。"
前言:在学习编程语言的同时,千万别忘了刷刷题来巩固一下学到的知识,对于牛客网_编程入门系列,小子会持续更新分享刷题过程,其中包括一些基础板块的题目,本次将呈现7道题。
~~注意部分标题括号内代表对题目涉及到的知识进行说明!
目录
6. BC118 N个数之和(多组输入实现类加:数据存储在缓冲区)
1. 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 翻转金字塔图案
#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 菱形图案
#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形图案
#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 记数问题
#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,反之无。
6. 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 最高分与最低分之差
#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语言——刷题攻略:牛客编程入门训练(十二):攻克 循环控制(四)、循环输出图形(一),轻松拿捏!
结语:本篇文章就到此结束了,本文主要是练习部分循环控制以及输出图形题目,后续的题目练习难度会慢慢上来,但总体来说不会太难,喜欢的朋友们,一起来学习吧!欢迎三连~