14.《C语言》——【牛客网BC116—BC123题目讲解】

news2024/12/25 11:08:59

在这里插入图片描述


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

🧔🏻个人主页: FEN03
📚收入专栏: C语言

在这里插入图片描述


文章目录

  • 📑前言
  • 📗牛客网题目
    • 🔖BC116 [NOIP2013]记数问题
    • 🔖BC117 逆序输出
    • 🔖BC118 N个数之和
    • 🔖BC119 最高分与最低分之差
    • 🔖BC120 争夺前五名
    • 🔖BC121 有序序列合并
    • 🔖BC122 有序序列判断
    • 🔖BC123 有序序列插入一个整数
  • 👋🏻结束语


📑前言

本文章内容主要讲解牛客网 BC116—BC123 题目详细讲解


📗牛客网题目

🔖BC116 [NOIP2013]记数问题


题目要求:

试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?
例如,在1到11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字1 出现了4 次。

输入要求:
输入共1行,包含2个整数n、x,之间用一个空格隔开。

输出描述:
输出共1行,包含一个整数,表示x出现的次数。

示例1

在这里插入图片描述


解答:

代码如下:

//BC116[NOIP2013]记数问题
#include<stdio.h>
int main()
{
	int n = 0; 
	int x = 0;  
	int count = 0; 
	scanf("%d %d", &n, &x);
	for (int i = 1; i <= n; i++)
	{
		int m = i; 
		while (m) 
		{  
			if (m % 10 == x)
			{
				count++;
			}
			m /= 10; 
		}
	}
	printf("%d\n", count); 
	return 0; 
}

运行结果:

在这里插入图片描述
在这里插入图片描述

分析:

  1. 题目不难理解,我们只要找到 1 到 n 这个区间中,出现数字 x 的次数。
  2. 那么,我们需要对每一个数字的每一位进行拆分,然后再对每一个数字的每一位进行情况判断,如果情况满足,再进行一个统计即可。

🔖BC117 逆序输出


题目要求:

描述
输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。

输入描述:
一行,输入10个整数(范围-231~231-1),用空格分隔。

输出描述:
一行,逆序输出输入的10个整数,用空格分隔。

示例1

在这里插入图片描述


解答:

代码如下:

//BC117 逆序输出 
#include<stdio.h>
int main()
{
	int arr[10] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < sz; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int i = sz - 1; i >= 0; i--)
	{
		printf("%d ", arr[i]); 
	}
	return 0; 
}

运行结果:

在这里插入图片描述
在这里插入图片描述
分析:

  1. 由题目,我们知道要求是按输入时的逆序把这10个数打印出来即可。
  2. 我们对数组10个元素进行输入时,使用 for循环,那么我们也可以写一个逆序的 for 循环,这样结果就能得到一个逆序的数组。

🔖BC118 N个数之和


题目要求:

描述
输入数字N,然后输入N个数,计算这N个数的和。

输入描述:
第一行输入一个整数N(0≤N≤50),第二行输入用空格分隔的N个整数。

输出描述:
输出为一行,为第二行输入的“N个整数之和”的计算结果。

示例1

在这里插入图片描述


代码如下:

//BC118 N个数之和 
#include<stdio.h>
int main()
{
	int n = 0;
	int arr[100] = { 0 }; 
	int sum = 0; 
	scanf("%d", &n); 
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
		sum += arr[i]; 
	}
	printf("%d\n", sum); 
	return 0;
}

运行结果:

在这里插入图片描述
在这里插入图片描述

分析:

  1. 首先,我们创建一个变量n和一个arr数组,以及变量sum。
  2. 其次,这个n是控制着arr数组的输入的,数组输入我们使用for循环。
  3. 最后,每一次输入的值,我们对它进行加起来存放到sum即可。

🔖BC119 最高分与最低分之差


题目要求:

描述
输入n个成绩,换行输出n个成绩中最高分数和最低分数的差。

输入描述:
两行,第一行为n,表示n个成绩,不会大于10000。

第二行为n个成绩(整数表示,范围0~100),以空格隔开。

输出描述:
一行,输出n个成绩中最高分数和最低分数的差

示例1

在这里插入图片描述


代码如下:

//BC119 最高分与最低分之差 
#include<stdio.h>
int main()
{
	//创建变量和数组
	int n = 0;  
	scanf("%d", &n);
	int arr[100] = { 0 }; 
	int max = 0;  
	int min = 100;  
	//给数组输入值
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]); 
	}
	//进行比较,打擂台
	for (int i = 0; i < n; i++)
	{
		if (arr[i] > max) 
		{
			max = arr[i]; 
		}	
		if (arr[i] < min)  
		{ 
			min = arr[i]; 
		}
	}
	printf("%d\n", max - min); 
	return 0; 
}

运行结果:

在这里插入图片描述
在这里插入图片描述


分析:

  1. 首先,创建一个变量n和arr数组,以及一个max用来存放最大值和min存放最小值。
  2. 数组的输入我们用for循环,n来控制for循环,表示要输入几组数据。
  3. 其次,只需要对几组数据进行打擂台比较,也就是说,先假定第一个为最大值,然后和后面一个一个比较。 如:打擂台一致,先上一个人,有人挑战则上去,挑战成功则换人接着挑战,直至都挑战完毕为止。 如:首先先假定8位最大,然后和5比,8大,8不变; 和7比,8大,8不变; 和9比,9大,替换成9;… 直至最后一个比较即可得出最大值。
  4. 最后,把最大值和最小值,做差就行。

🔖BC120 争夺前五名


题目要求:

描述
期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 n 个学生成绩,输出每组排在前五高的成绩。

数据范围: 5≤n≤50 ,成绩采取百分制并不会出现负数

输入描述:
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。

输出描述:
一行,输出成绩最高的前五个,用空格分隔。

示例1

在这里插入图片描述


代码如下:

//BC120 争夺前五名 
#include<stdio.h>
void S_arr(short arr[], short n)
{
	for (short i = 0; i < n; i++)
	{
		scanf("%hd", &arr[i]);
	}
}

void b_sort(short arr[], short n)
{
	for (short i = 0; i < n - 1; i++)
	{
		for (short j = 0; j < n - i; j++) 
		{
			if (arr[j] < arr[j + 1])
			{
				short tmp = 0; 
				tmp = arr[j]; 
				arr[j] = arr[j + 1]; 
				arr[j + 1] = tmp; 
			}
		}
	}
}

void print_arr(short arr[])
{
	for (short i = 0; i < 5; i++)
	{
		printf("%hd ", arr[i]);
	}
}

int main()
{
	unsigned short n = 0; 
	short arr[50] = { 0 }; 
	scanf("%hd", &n); 
	//给遍历数组输入值
	S_arr(arr, n);  
	b_sort(arr, n); //冒泡排序
	print_arr(arr);  //打印前5个

	return 0;
}

运行结果:

在这里插入图片描述
在这里插入图片描述

分析:

  1. 在题目上,要求是输入n个学生的成绩,然后对学生成绩的排名前5进行输出,输出结果,我们能知道是一个高到低,是降序的排序。
  2. 那么,我们创建好变量n和arr数组,随后我们分装为3个函数,分别去实现。
  3. S_arr(arr, n); 是对数组进行输入,也就是题目要求的,输入n个学生的成绩。
  4. b_sort(arr, n); 是冒泡排序,是为了对学生成绩进行比较并且排序,我们已知,排序是降序的。
  5. print_arr(arr); 是对排序后学生成绩的打印,题目要求是打印前5个,那么我们就按照要求,控制for循环打印前5个即可

🔖BC121 有序序列合并


题目要求:

描述
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

数据范围: 1≤n,m≤1000 , 序列中的值满足 0≤𝑣𝑎𝑙≤30000

输入描述:
输入包含三行,第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。

第二行包含n个整数,用空格分隔。

第三行包含m个整数,用空格分隔。

输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。

示例1
在这里插入图片描述


代码如下:

//BC121 有序序列合并 
#include<stdio.h> 
void S_arr(int arr[], int n, int m)
{
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]); 
	}
	for (int i = n; i < n + m; i++)
	{
		scanf("%d", &arr[i]); 
	}
}

void Bubbl_arr(int arr[], int n, int m)
{ 
	for (int i = 0; i < n + m ; i++) 
	{
		for (int j = 0; j < n + m - 1; j++)  
		{
			if (arr[j] > arr[j + 1]) 
			{  
				int tmp = arr[j];   
				arr[j] = arr[j + 1];  
				arr[j + 1] = tmp;   
			}
		}
	}
}

void Print_arr(int arr[], int n, int m)
{
	for (int i = 0; i < n + m; i++)
	{
		printf("%d ", arr[i]);
	}
}

int main()
{
	int n = 0; 
	int m = 0; 
	int arr[3000] = { 0 };  
	scanf("%d %d", &n, &m);

	S_arr(arr, n, m); 
	Bubbl_arr(arr, n, m);  
	Print_arr(arr, n, m); 

	return 0; 
}

运行结果:

在这里插入图片描述
在这里插入图片描述

分析:

  1. 在题目要求上,我们能够知道。输入总共包含3行,第一行是2个整型变量的输入,第二和第三行是2个整型数组的输入,这2个变量,就控制着2个数组能够输入几组的数据。然后看结果,我们能够知道是一个升序排序
  2. 对于程序的实现,我们分装为3个函数。
  3. S_arr(arr, n, m); 我们可以把输入的数据,输入到同一个数组中。
  4. Bubbl_arr(arr, n, m); 使用冒泡排序,对数组中的元素进行升序排序。
  5. Print_arr(arr, n, m); 对数组中的元素,进行打印 。

🔖BC122 有序序列判断


题目要求:

描述
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。

数据范围: 3≤n≤50 序列中的值都满足 1≤val≤100

输入描述:
第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数,用空格分隔N个整数。

输出描述:
输出为一行,如果序列有序输出sorted,否则输出unsorted。

示例1

在这里插入图片描述


代码如下:

//BC122 有序序列判断
#include<stdio.h>
void Arr_s(int arr[], int n)
{
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);   
	}
}

void Arr_sort(int arr[], int n)
{
	int count1 = 0;
	int count2 = 0; 
	for (int i = 0; i < n - 1; i++)
	{
		if ((arr[i] <= arr[i + 1]))
			count1++; 
		else if ((arr[i] >= arr[i + 1]))
			count2++;
	}

	if (count1 == n - 1 || count2 == n - 1)
		printf("sorted\n");
	else
		printf("unsorted\n");
}

int main()
{
	int n = 0; 
	int arr[100] = { 0 }; 
	scanf("%d", &n);
	Arr_s(arr, n); 
	Arr_sort(arr, n); 
	return 0; 
}

运行结果:

在这里插入图片描述
在这里插入图片描述

分析:

  1. 在题目上,我们已知。无论降序还是升序都为有序;除此之外为非有序。
  2. 我们创建整型变量n,以及整型数组arr,我们分装为2个函数来实现程序。
  3. Arr_s(arr, n); 完成的是对数组进行输入数据。
  4. Arr_sort(arr, n); 完成的是判断数组中的元素是否为有序,那么在函数中如何去实现?
  5. 首先,创建2个变量,count1和count2。for循环,遍历数组中的元素。 元素进行比较如果满足升序count1++,满足降序count2++。
  6. 最后,进行判断。

🔖BC123 有序序列插入一个整数


题目要求:

描述
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

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

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

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

输出描述:
输出为一行,N+1个有序排列的整数。

示例1

在这里插入图片描述


代码如下:

//BC123 有序序列插入一个整数 
#include<stdio.h>
void S_arr(int arr[], int n)
{
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]); 
	}
}

void Bubbl_arr(int arr[], int n)
{
	for (int i = 0; i < n ; i++)
	{
		for (int j = 0; j < n - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j]; 
				arr[j] = arr[j + 1]; 
				arr[j + 1] = tmp; 
			}
		}
	}
}

void Print_arr(int arr[], int n)
{
	for (int i = 0; i <= n; i++)
	{
		printf("%d ", arr[i]); 
	}
}

int main()
{
	int n = 0; 
	int arr[199] = { 0 }; 
	int arr1[1] = { 0 }; 

	scanf("%d", &n);	   //输入n的值
	S_arr(arr, n);         //遍历数组arr输入值
	scanf("%d", &arr1[0]); //输入arr1的值
	arr[n] = arr1[0];  //把arr1给到arr
	Bubbl_arr(arr, n); //冒泡排序
	Print_arr(arr, n); //打印数组
	return 0; 
}

运行结果:

在这里插入图片描述
在这里插入图片描述

分析:

  1. 总共需要输入3行,第一行是整型变量,为了控制数组的输入;第二行是数组的输入;第三行是要插入的整型值。
  2. 我们主要的思路是,把要插入的值插入到数组中,并且,输出的结果是升序的,那么我们可以使用冒泡排序。
  3. 为了完成程序,我们分为3个函数来实现功能。
  4. S_arr(arr, n); 完成的是遍历数组,输入值。
  5. 随后,我们需要把插入的值,放到数组中。
  6. Bubbl_arr(arr, n); 使用冒泡排序,对数组中的值进行升序排序。
  7. Print_arr(arr, n); 最后,对数组中的值进行打印。

👋🏻结束语

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

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【语音告警】Zabbix语音播报-报警媒介部分配置-语音报警灯|声光报警器|网络信号灯

阅读说明 本文为博灵语音通知终端与Zabbix报警媒介的配置&#xff0c;对接完成后可以实现Zabbix的声光语音告警&#xff0c;播报效果可以参考 Modbus-博灵语音通知终端与PLC联动告警介绍 对接前需配置好通知终端的IP地址&#xff0c;设备参数参见 其他完整的Zabbix语音播报报…

重邮计算机网络803-(2)物理层

一.物理层 1.介绍 物理层的主要任务描述为确定与传输媒体的接口的一些特性&#xff0c;即&#xff1a; ①机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。 ②电气特性 指明在接口电缆的各条线上出现的电压的范围。 ③功能特性 指明某条线上…

Long-Context LLM综述

目录 前言1. Preliminary2. 方法分类3. 长度外推3.1 位置外推和插值位置外推插值 3.2 上下文窗口分割与滑动3.3 提示压缩 4. 注意力近似4.1 低秩分解4.2 稀疏注意力4.3 Softmax-free Attention 5. Attention-free Transformers5.1 状态空间模型(State Space Model, SSM)5.2 位置…

Redis实战——创建账户及连接数据库

一、创建一个新账户 要创建一个带有免费数据库的新账户&#xff0c;请按照以下步骤操作&#xff1a; 前往 Redis Cloud 的注册页面。有两种开始使用 Redis Cloud 的选项&#xff1a; 在表单中输入您的信息&#xff0c;然后选择“Get Started”&#xff08;开始使用&#xff…

PR如何让音频淡入淡出

PR如何让音频淡入淡出 方法一&#xff1a;效果控件关键帧方法二&#xff1a;音频轨道关键帧 以淡入为例&#xff0c;介绍如何设置淡入的两种方法&#xff0c;推荐使用第二种。淡出效果类似。 方法一&#xff1a;效果控件关键帧 选中音频&#xff0c;点击效果控件 在淡入结束的…

差动放大器

差动器的出现是为了解决直接耦合电路存在的零点漂移问题&#xff0c;另外&#xff0c;差动放大器还有灵活的输入&#xff0c;输出方式。 一&#xff0c;基本差动放大器 差动放大器在电路结构上具有对称性&#xff0c;三极管VT1&#xff0c;VT2同型号&#xff0c;R1R2,R3R4,R5…

Web学习_SQL注入_布尔盲注

盲注就是在SQL注入过程中&#xff0c;SQL语句执行后&#xff0c;查询到的数据不能 回显到前端页面。此时&#xff0c;我们需要利用一些方法进行判断或者尝 试&#xff0c;这个过程称之为盲注。而布尔盲注就是SQL语句执行后&#xff0c;页面 不返回具体数据&#xff0c;数据库只…

SQL(一)基本语法

文章目录 一、Sql 语言基本特点二、数据查询&#xff08;按执行顺序排列&#xff09;1. From & Join2. Where3. Group by4. Having5. Select6. Distinct7. Order by8. Limit/ Offset 三、功能公式1. 字符处理2. 时间处理3. 统计计算 一、Sql 语言基本特点 不区分大小写分号…

平面设计神器CorelDRAW2021精简版,你值得拥有!

亲爱的设计师小伙伴们&#xff0c;今天我要为大家种草一款神奇的软件——CorelDRAW平面设计软件2021精简版&#xff01;&#x1f929;✨作为一名专业的图形设计师&#xff0c;我深知一个好工具对于我们的工作有多么重要。而这款软件简直就是我们设计师的救星&#xff01;&#…

新技术前沿-2024-构建个人知识库和小语言模型

OllamaWebUIAnythingLLM&#xff0c;构建安全可靠的个人/企业知识库 1 技术路线一 1.1 搭建本地大模型Ollama 1.2 搭建用户界面open WebUI 使用Docker Desktop Open-webui。它可以快速基于Ollama构筑本地UI。 如果没有科学上网&#xff0c;很可能会拉不动&#xff0c;可以试…

牛客热题:不同的路径数目(一)

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;不同的路径数目(一)题目链接方法…

1909java内部知识管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java内部知识管理系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开 发环境为TOMCAT7.0,Myeclipse8.5开发&…

二分#背包#快排#LCS详解

二分#背包#快排#LCS详解 文章目录 二分#背包#快排#LCS详解1. 二分搜索2. 01背包问题3. 快速排序4. 最长公共子序列 1. 二分搜索 在处理大规模数据集时&#xff0c;查找操作的效率显得尤为重要。二分搜索是一种在有序数组中查找目标值的高效算法&#xff0c;其时间复杂度为O(lo…

Leetcode 力扣113. 路径总和 II (抖音号:708231408)

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

KUKA机器人中断编程详细教程1—了解中断

在公众号查看更多内容。 在KUKA机器人编程与调试中&#xff0c;经常会用到中断编程。通过中断实现机器人暂停&#xff0c;或者停止当前的动作进入中断后的程序中接着运行&#xff0c;以此来满足实际的调试要求。 1、中断的概念 ①当出现诸如输入等定义的事件时&#xff0c;…

Android APP memory统计方法

目录 进程的内存信息概述 关键的术语 测试步骤 测试步骤 数据处理 数据分析&#xff1a; 进程内存信息 Dumpsys meminfo -a PID Procrank Procmem PID 特殊内存信息 Mali ION(multi-media&#xff0c;gralloc) 进程地址空间信息 /proc/pid/smaps Showmap PID …

Cinema 4D 2024 软件安装教程、附安装包下载

Cinema 4D 2024 Cinema 4D&#xff08;C4D&#xff09;是一款由Maxon开发的三维建模、动画和渲染软件&#xff0c;广泛用于电影制作、广告、游戏开发、视觉效果等领域。Cinema 4D允许用户创建复杂的三维模型&#xff0c;包括角色、场景、物体等。它提供了多种建模工具&#x…

redis 05 复制 ,哨兵

01.redis的复制功能&#xff0c;使用命令slaveof 2. 2.1 2.2 3. 3.1 3.1.1 3.1.2 3.1.3 4 4.1 4.2 例子 5.1 这里是从客户端发出的指令 5.2 套接字就是socket 这里是和redis事件相关的知识 5.3 ping一下

新版校园跑腿外卖独立版+APP+小程序前端外卖配送平台源码(含搭建教程)

同城校园跑腿外卖配送平台源码&#xff0c;这套目前全网还没有人分享过&#xff0c;这个是开源的&#xff0c;所以没有任何问题了&#xff0c;这套源码非常吊&#xff0c;支持自定义diy 你可以设计你的页面&#xff0c;设计你自己的风格&#xff0c;支持多校园&#xff0c;独立…

C++对象池设计与实现

目录 一、对象池简介 1.1 池化技术 1.2 什么是对象池 1.3 对象池分配策略 二、C new和delete运算符重载 三、实现一个对象池框架 3.1 策略接口 四、实现几种对象池的分配策略 4.1 数组策略 4.2 堆策略 ​编辑 4.3 栈策略 4.4 区块策略 一、对象池简介 1.1 池化技…