亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能,成为一名优秀的程序员。如果你有任何疑问或建议,请随时在评论区留言,让我们一起成长进步!现在,让我们开始这场知识之旅吧!
🌏个人主页: FEN03
📑收入专栏: C语言
文章目录
- 📚前言
- 🐄牛客网题目
- 🥩BC124 序列中删除指定数字
- 🥩BC125 序列中整数去重
- 🥩BC126 小乐乐查找数字
- 🥩BC127 筛选法求素数
- 🥩BC128 班级成绩输入输出
- 🥩BC129 矩阵元素定位
- 🥩BC130 最高身高
- 👋👋🏻👋🏼结束语
📚前言
本章主要内容为,讲解牛客网BC124 ~ BC130题目,如有错误❌,还请指出,本人会虚心接受,感谢~🌹
🐄牛客网题目
🥩BC124 序列中删除指定数字
题目要求:
描述
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
数据范围:序列长度和序列中的值都满足 1≤n≤50
输入描述:
第一行输入一个整数(0≤N≤50)。
第二行输入N个整数,输入用空格分隔的N个整数。
第三行输入想要进行删除的一个整数。
输出描述:
输出为一行,删除指定数字之后的序列。
示例1
⬇️⬇️⬇️讲解:
代码如下:
//BC124 序列中删除指定数字
#include<stdio.h>
void S_arr(int arr[], int n)
{//对数组,输入值for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}
}void Print_arr(int arr[], int n, int k)
{//对数组进行遍历,如果不等于k,就打印for (int i = 0; i < n; i++){if (arr[i] != k){printf("%d ", arr[i]); }}
}int main()
{int n = 0; int arr[100] = { 0 };int k = 0;scanf("%d", &n); S_arr(arr, n); //输入数组scanf("%d", &k); Print_arr(arr, n, k); //判断数组并且打印return 0;
}
运行结果…
🤔🤔分析:
- 按照题目要求, 第一行需要输入一个整数, 则可以创建一个整型变量; 第二行输入N个整数, 输入用空格分隔, 我们可以创建一个arr整型数组, 把N个整数存放在arr里; 第三行是输入要删除的一个整数, 我们直接创建一个整型变量即可。
- 为了完成这一题, 我们可以分为2个函数即可。
- S_arr(arr, n); 实现的是遍历数组,对数组输入值。
- Print_arr(arr, n, k); 完成的是在数组中查找要删除的值,只要不等于删除值的都打印出来。
🥩BC125 序列中整数去重
题目要求:
描述
输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。
输入描述:
输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。
示例1
⬇️⬇️⬇️讲解:
代码如下:
//BC125 序列中整数去重
#include<stdio.h>
void Input_arr(int arr[], int n)
{for (int i = 0; i < n; i++){scanf("%d", &arr[i]); }
}void Jud_arr(int arr[], int n)
{int flag = 0; for (int i = 0; i < n; i++){//比较除了本身外其他的元素。for (int j = i+1; j < n; j++){if (arr[i] == arr[j]){arr[j] = -1;}}}
}void Print(int arr[], int n)
{for (int i = 0; i < n; i++){if (arr[i] != -1) {printf("%d ", arr[i]); } }
}int main()
{int n = 0; int arr[1500] = { 0 }; scanf("%d", &n);Input_arr(arr, n); //数组输入Jud_arr(arr, n); //对数组元素判断Print(arr, n); //打印数组元素return 0;
}
运行结果…
🤔🤔分析:
- 在题目要求中,输入包含2行,第一行是输入一个正整数那么我们可以直接创建一个整型变量,第二行是包含着n个整数, 那么我们需要创建一个arr整型数组来接收;
输出为去除重复值之后,数组的元素。 - 为了完成, 我们分装为3个函数。
- Input_arr(arr, n); 完成的是遍历数组,给数组输入值。
- Jud_arr(arr, n); 完成的是每一个数组元素,除了自身外,与其他元素进行比较, 如果2个元素相等,那么把该元素设置为-1。
- Print(arr, n); 完成的是对去除掉重复值后,数组元素的打印。
🥩BC126 小乐乐查找数字
题目要求:
描述
给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。
输入描述:
共3行
第一行,一个整数,表示n(1 <= n <= 100)。
第二行,共输入n个整数,两个整数之间用空格分隔。
第三行,输入一个整数,表示要查找的整数x。
输出描述:
一行,表示整数x出现的次数。
示例1
⬇️⬇️⬇️讲解:
代码如下:
//BC126 小乐乐查找数字
#include<stdio.h>
void Input_arr(int arr[], int n)
{for (int i = 0; i < n; i++){scanf("%d", &arr[i]); }
}void Jud_arr(int arr[], int n, int k)
{int count = 0;//创建一个计数器 for (int i = 0; i < n; i++){//遍历arr中的元素,如果元素与k相等,计数器++if (arr[i] == k)count++; }printf("%d\n", count);
}int main()
{int n = 0;int arr[1000] = { 0 };int k = 0; scanf("%d", &n); Input_arr(arr, n); //输入数组 scanf("%d", &k); Jud_arr(arr, n, k); //判断数组中的元素return 0;
}
运行结果…
🤔🤔🤔分析:
- 题目要求, 输入3行,第一行输入一个整数, 我们可以创建一个整型变量; 第二行一共输入n个整数, 那么为了存储n个整数,我们可以创建一个arr整型数组; 第三行输入一个要查找的整型值,我们可以创建一个整型变量。
- 为了解决该题,我们可以分装成2个函数。
- Input_arr(arr, n); 该函数完成的是遍历数组,给数组输入值。
- Jud_arr(arr, n, k); 该函数完成的是在数组元素中, 对与查找值相同的元素进行统计,最终输出即可。
🥩BC127 筛选法求素数
题目要求:
描述
用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。
输入描述:
多组输入,每行输入一个正整数(不大于100)。
输出描述:
针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,
第二行,输出数组中2之后被清0 的个数。每行输出后换行。
示例1
⬇️⬇️⬇️讲解:
//BC127 筛选法求素数
#include<stdio.h>
int main()
{int n = 0;int count = 0; while (scanf("%d", &n) != EOF){int i = 0; for (i = 2; i < n; i++){int j = 0; for (j = 2; j < i; j++) {if (i % j == 0)break; }if (i == j){printf("%d ", i); count++; //统计素数}}printf("\n"); printf("%d\n", n - count - 1); }return 0;
}
运行结果…
🤔🤔分析:
- 给定一个数n,在2~n之间的正整数,如果是素数,就统计起来并且打印出来,然后用n - 统计值 - 1,输出统计值即可。
🥩BC128 班级成绩输入输出
题目要求:
描述
输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。
输入描述:
五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。
输出描述:
五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔。
示例1
⬇️⬇️⬇️讲解:
代码如下:
//BC128 班级成绩输入输出
#include<stdio.h>
int main()
{double arr[5][5] = { 0 };for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){scanf("%lf", &arr[i][j]); }}for (int i = 0; i < 5; i++){double sum = 0.0;for (int j = 0; j < 5; j++) {printf("%.1lf ", arr[i][j]); sum += arr[i][j]; }printf("%.1lf\n", sum); }return 0;
}
运行结果…
🤔🤔🤔分析:
- 题目最终考察的就是二维数组的输入和输出,以及如何限制小数点位。
- 我们主要看输出,每输出一行,都会把总分给输出,那么需要一个变量sum来统计这一行的总分。当到了下一行sum的总值会初始化为0,最终不断的重复,直到循环结束。
- 在%后加一个小数点,就可以控制小数位的输出。
🥩BC129 矩阵元素定位
题目要求:
描述
KiKi得到了一个n行m列的矩阵,现在他想知道第x行第y列的值是多少,请你帮助他完成这个任务。
数据范围:1≤n,m≤5 ,矩阵中的值满足 1≤val≤25
输入描述:
第一行包含两个数n和m,表示这个矩阵包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示矩阵中的元素。接下来一行输入x和y,用空格分隔,表示KiKi想得到的元素的位置。(1≤x≤n≤10,1≤y≤m≤10)
输出描述:
一行,输出一个整数值,为KiKi想知道的值。
示例1
⬇️⬇️⬇️讲解:
#include<stdio.h>
void Input_arr(int arr[][100], int n, int m)
{for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){scanf("%d", &arr[i][j]);}}
}int main()
{int n = 0;int m = 0;int x = 0;int y = 0;int arr[100][100] = { 0 };scanf("%d %d", &n, &m);Input_arr(arr, n, m);scanf("%d %d", &x, &y);printf("%d\n", arr[x - 1][y - 1]);return 0;
}
运行结果…
🤔🤔分析:
- 这个题目其实就是在一个二维数组中,输入要找的值对应的下标-1,最终打印出该值即可。
🥩BC130 最高身高
题目要求:
描述
KiKi想从n行m列的方阵队列中找到身高最高的人的位置,请你帮助他完成这个任务。
输入描述:
第一行包含两个整数n和m,表示这个方阵队列包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示方阵中的所有人的身高(保证输入身高都不相同)。(1≤x≤n≤10,1≤y≤m≤10)
输出描述:
一行,输出两个整数,用空格分隔,表示方阵中身高最高的人所在的行号和列号。
示例1
⬇️⬇️⬇️讲解:
代码如下:
//BC130 最高身高
#include<stdio.h>
void Input_arr(int arr[100][100], int n, int m)
{for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){scanf("%d", &arr[i][j]);}}
}void Find_height_arr(int arr[100][100], int n, int m)
{int h = arr[0][0];for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (arr[i][j] > h){h = arr[i][j];}}}for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (arr[i][j] == h){printf("%d %d\n", i + 1, j + 1);}}}
}int main()
{int n = 0;int m = 0;int arr[100][100] = { 0 };scanf("%d %d", &n, &m);Input_arr(arr, n, m);Find_height_arr(arr, n, m);return 0;
}
运行结果…
🤔🤔分析:
- 创建2个整型变量,是用来控制二维数组的行和列的。随后,Input_arr(arr, n, m); 完成的是对二维数组输入值 。
- Find_height_arr(arr, n, m); 完成的是对二维数组中元素的比较,也就是用打擂台方法,最终最大值给h,随后遍历二维数组中的元素如果等与h就打印出来,并且对应的下标需要+1。
👋👋🏻👋🏼结束语
非常感谢您花时间阅读我的博客,希望我的分享能为您带来收获。如果您对本文有任何想法或疑问,欢迎在评论区留言交流。如果您喜欢我的博客,请继续关注,我会定期更新更多精彩内容。最后,别忘了行动起来的力量,让我们一起实践这些方法,见证自己的成长和进步!
再见,祝您生活愉快!