16. 《C语言》——【牛客网BC124 —— BC130题目讲解】


亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能,成为一名优秀的程序员。如果你有任何疑问或建议,请随时在评论区留言,让我们一起成长进步!现在,让我们开始这场知识之旅吧!



🌏个人主页: FEN03

📑收入专栏: C语言



文章目录

  • 📚前言
  • 🐄牛客网题目
    • [🥩BC124 序列中删除指定数字](#🥩BC124 序列中删除指定数字)
    • [🥩BC125 序列中整数去重](#🥩BC125 序列中整数去重)
    • [🥩BC126 小乐乐查找数字](#🥩BC126 小乐乐查找数字)
    • [🥩BC127 筛选法求素数](#🥩BC127 筛选法求素数)
    • [🥩BC128 班级成绩输入输出](#🥩BC128 班级成绩输入输出)
    • [🥩BC129 矩阵元素定位](#🥩BC129 矩阵元素定位)
    • [🥩BC130 最高身高](#🥩BC130 最高身高)
  • 👋👋🏻👋🏼结束语

📚前言

本章主要内容为,讲解牛客网BC124 ~ BC130题目,如有错误❌,还请指出,本人会虚心接受,感谢~🌹


🐄牛客网题目

🥩BC124 序列中删除指定数字


题目要求:

描述

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。

数据范围:序列长度和序列中的值都满足 1≤n≤50

输入描述:

第一行输入一个整数(0≤N≤50)。

第二行输入N个整数,输入用空格分隔的N个整数。

第三行输入想要进行删除的一个整数。

输出描述:

输出为一行,删除指定数字之后的序列。

示例1


⬇️⬇️⬇️讲解:

代码如下:

c 复制代码
//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; 
}

运行结果...

🤔🤔分析:

  1. 按照题目要求, 第一行需要输入一个整数, 则可以创建一个整型变量; 第二行输入N个整数, 输入用空格分隔, 我们可以创建一个arr整型数组, 把N个整数存放在arr里; 第三行是输入要删除的一个整数, 我们直接创建一个整型变量即可。
  2. 为了完成这一题, 我们可以分为2个函数即可。
  3. S_arr(arr, n); 实现的是遍历数组,对数组输入值。
  4. Print_arr(arr, n, k); 完成的是在数组中查找要删除的值,只要不等于删除值的都打印出来。

🥩BC125 序列中整数去重


题目要求:

描述

输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述:

输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。

输出描述:

输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

示例1


⬇️⬇️⬇️讲解:

代码如下:

c 复制代码
//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; 
}

运行结果...

🤔🤔分析:

  1. 在题目要求中,输入包含2行,第一行是输入一个正整数那么我们可以直接创建一个整型变量,第二行是包含着n个整数, 那么我们需要创建一个arr整型数组来接收;
    输出为去除重复值之后,数组的元素。
  2. 为了完成, 我们分装为3个函数。
  3. Input_arr(arr, n); 完成的是遍历数组,给数组输入值。
  4. Jud_arr(arr, n); 完成的是每一个数组元素,除了自身外,与其他元素进行比较, 如果2个元素相等,那么把该元素设置为-1。
  5. Print(arr, n); 完成的是对去除掉重复值后,数组元素的打印。

🥩BC126 小乐乐查找数字


题目要求:

描述

给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。

输入描述:

共3行

第一行,一个整数,表示n(1 <= n <= 100)。

第二行,共输入n个整数,两个整数之间用空格分隔。

第三行,输入一个整数,表示要查找的整数x。

输出描述:

一行,表示整数x出现的次数。

示例1


⬇️⬇️⬇️讲解:

代码如下:

c 复制代码
//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; 
}

运行结果...

🤔🤔🤔分析:

  1. 题目要求, 输入3行,第一行输入一个整数, 我们可以创建一个整型变量; 第二行一共输入n个整数, 那么为了存储n个整数,我们可以创建一个arr整型数组; 第三行输入一个要查找的整型值,我们可以创建一个整型变量。
  2. 为了解决该题,我们可以分装成2个函数。
  3. Input_arr(arr, n); 该函数完成的是遍历数组,给数组输入值。
  4. Jud_arr(arr, n, k); 该函数完成的是在数组元素中, 对与查找值相同的元素进行统计,最终输出即可。

🥩BC127 筛选法求素数


题目要求:

描述

用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。

输入描述:

多组输入,每行输入一个正整数(不大于100)。

输出描述:

针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,

第二行,输出数组中2之后被清0 的个数。每行输出后换行。

示例1


⬇️⬇️⬇️讲解:

c 复制代码
//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; 
}

运行结果...

🤔🤔分析:

  1. 给定一个数n,在2~n之间的正整数,如果是素数,就统计起来并且打印出来,然后用n - 统计值 - 1,输出统计值即可。

🥩BC128 班级成绩输入输出


题目要求:

描述

输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。

输入描述:

五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。

输出描述:

五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔。

示例1


⬇️⬇️⬇️讲解:

代码如下:

c 复制代码
//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; 
}

运行结果...

🤔🤔🤔分析:

  1. 题目最终考察的就是二维数组的输入和输出,以及如何限制小数点位。
  2. 我们主要看输出,每输出一行,都会把总分给输出,那么需要一个变量sum来统计这一行的总分。当到了下一行sum的总值会初始化为0,最终不断的重复,直到循环结束。
  3. 在%后加一个小数点,就可以控制小数位的输出。

🥩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


⬇️⬇️⬇️讲解:

c 复制代码
#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. 这个题目其实就是在一个二维数组中,输入要找的值对应的下标-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


⬇️⬇️⬇️讲解:

代码如下:

c 复制代码
//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;
}

运行结果...

🤔🤔分析:

  1. 创建2个整型变量,是用来控制二维数组的行和列的。随后,Input_arr(arr, n, m); 完成的是对二维数组输入值 。
  2. Find_height_arr(arr, n, m); 完成的是对二维数组中元素的比较,也就是用打擂台方法,最终最大值给h,随后遍历二维数组中的元素如果等与h就打印出来,并且对应的下标需要+1。

👋👋🏻👋🏼结束语

非常感谢您花时间阅读我的博客,希望我的分享能为您带来收获。如果您对本文有任何想法或疑问,欢迎在评论区留言交流。如果您喜欢我的博客,请继续关注,我会定期更新更多精彩内容。最后,别忘了行动起来的力量,让我们一起实践这些方法,见证自己的成长和进步!

再见,祝您生活愉快!


相关推荐
灵槐梦7 分钟前
【速成51单片机】2.点亮LED
c语言·开发语言·经验分享·笔记·单片机·51单片机
想睡觉 . 我也想睡觉 .7 分钟前
【C++算法】1.【模板】前缀和
开发语言·c++·算法
mit6.82410 分钟前
[数据结构] LRU Cache | List&Map 实现
算法
---wzy---16 分钟前
我的JAVA-Web基础(2)
java·开发语言
伟大无须多言27 分钟前
企业资源规划系统(ERP)服务器上线项目实施指南
开发语言·php
逊嘘29 分钟前
【Java数据结构】LinkedList
java·开发语言·数据结构
周盛欢29 分钟前
云服务器yum无法解析mirrorlist.centos.org
开发语言·python
LittleStone839737 分钟前
C语言实现旋转一个HWC的图像
c语言
lxyzcm41 分钟前
深入理解C++23的Deducing this特性(上):基础概念与语法详解
开发语言·c++·spring boot·设计模式·c++23
heirui_Oooo42 分钟前
利用两种方式分别实现单例模式(懒汉式、饿汉式)
java·开发语言