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


在这里插入图片描述


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

🧔🏻个人主页: 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); 最后,对数组中的值进行打印。

👋🏻结束语

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

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉树最大宽度

文章目录 前言二叉树最大宽度1.题目解析2.算法原理3.代码编写 总结 前言 二叉树最大宽度 1.题目解析 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即…

这个国际档案日,大比武放榜、直播预约、课件下载,一样都不能少!

关注我们 - 数字罗塞塔计划 - 2024年6月9日第十七个国际档案日来临&#xff0c;数字罗塞塔计划放大招&#xff1a;第二届大比武活动榜单揭晓、ARCHE-2024上海智慧档案高峰论坛直播预约、2024上半年度课件大礼包下载。如此大礼&#xff0c;岂能错过&#xff1f; PART.01 榜单…

SpringCloud-面试篇(二十四)

&#xff08;1&#xff09;Nacos如何支撑数十万服务注册的压力 小型企业来讲nacos压力没有那么大&#xff0c;但是想阿里&#xff0c;服务的数量可能会达到数万&#xff0c;那麽多的服务。当服务原来越多时&#xff0c;除了服务注册以外&#xff0c;还有服务的定时更新&#x…

2_1 Linux基础操作

2_1 Linux基础操作 文章目录 2_1 Linux基础操作0. 参考1. 装机后的一些小命令查看系统的信息2. 基础命令2.1 初识基本命令2.2 日期和时间 3. 帮助命令4. 关机、重启5. 设置主机名6. rm删除7. 软件包的管理RPM、 YUM8. IP知识9. 查看一些linux的信息10. 命令行快捷键11. 光盘挂载…

网络网络层之(6)ICMPv6协议

网络网络层之(6)ICMPv6协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…

IPv6 自动配置流程图

IPv6 自动配置流程图 IPv6 自动配置生命周期 Mark 一下&#xff0c;理论以后再补充

Warning: `ReactDOMTestUtils.act` is deprecated in favor of `React.act`.

问题&#xff1a;在代码中使用jest进行单元测试时&#xff0c;报错如下&#xff1a; 解决思路&#xff1a; 根据报错提示出来的 react-dom/test-utils 进行全局搜索&#xff0c;发现没有该引用&#xff0c;故进入该代码块中分析。发现代码中引入testing-library/react &#…

AIGC之MetaHuman:HeyGen(基于AI驱动的视频生成平台+数字人)的简介、安装和使用方法、案例应用之详细攻略

AIGC之MetaHuman&#xff1a;HeyGen(基于AI驱动的视频生成平台数字人)的简介、安装和使用方法、案例应用之详细攻略 目录 HeyGen的简介 1、HeyGen是一款AI视频生成平台&#xff0c;它提供以下关键功能&#xff1a; HeyGen的安装和使用方法 1、使用方法 01创建或选择一个头…

强大的.NET的word模版引擎NVeloDocx

在Javer的世界里&#xff0c;存在了一些看起来还不错的模版引擎&#xff0c;比如poi-tl看起来就很不错&#xff0c;但是那是人家Javer们专属的&#xff0c;与我们.Neter关系不大。.NET的世界里Word模版引擎完全是一个空白。 很多人不得不采用使用Word XML结合其他的模版引擎来…

AI 边缘计算平台 - 回归开源 BeagleY-AI 简介

BeagleBoard.org 于 3 月 27 号发布了一款单板计算机 BeagleY-AI &#xff0c;这款 SBC 凭借其完全开源的特性&#xff0c;旨在激发并推动开源社区的生态系统繁荣发展。 一、简介&#xff1a; BeagleY-AI 采用德州仪器新推出的 AM67A AI 视觉处理器。这款处理器集成了四个 64…

Linux:基础开发工具

文章目录 Linux 软件包管理器 yum什么是软件包关于rzsz查看软件包安装软件卸载软件安装扩展源 Linux 编辑器 vimvim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)底行模式(last line mode) vim的基本操作[命令模式]切换至[插入模式][插入模式]切换至[命令模…

Python openpyxl 库使用详解

大家好&#xff0c;当谈论处理 Excel 文件时&#xff0c;Python 的 openpyxl 库无疑是一个强大而灵活的工具。无论是在数据分析、报告生成还是自动化任务中&#xff0c;openpyxl 都展现出了其独特的价值。本文将详细介绍 openpyxl 库的各种功能和用法&#xff0c;帮助读者掌握如…

04-认识微服务-SpringCloud

04-认识微服务-SpringCloud 1.SpringCloud&#xff1a; 1.SpringCloud是目前国内使用最广泛的微服务框架。官网地址&#xff1a;https://spring.io/projects/spring-cloud 2.SpringCloud集成了各种微服务功能组件&#xff0c;并基于SpringBoot实现了这些组件的自动装配&…

vue3中进度条上加高亮圆点

实现效果 小圆点基于进度条定位&#xff08;left&#xff09;。 实现代码 <template><!-- 这块代码实现的功能&#xff1a;progressData遍历的年份进度数组&#xff0c;展示每年完成的进度--><ul><li v-for"(item, index) in progressData" :k…

CST Studio Suite 2020 软件安装教程、安装包下载

CST Studio Suite 2020 安装教程 安装包下载 复制链接在浏览器打开 https://www.qqres.com/3150.html CST Studio Suite 是由Dassault Systmes公司开发的一套电磁场仿真软件。它应用于电子、通信、天线设计、射频与微波、电磁兼容性 (EMC)、电磁干扰 (EMI) 等领域。 CST St…

图Transformer 推荐系统

文章目录 Graph Transformer for Recommendation摘要引言相关工作方法3.1 Graph Invariant Rationale Learning3.1.1 Graph Collaborative Rationale Discovery3.1.2 Global Topology Information Injection3.1.3 Rationale Discovery with Graph Transformer.3.1.4 Task-Adapt…

作业-day-240607

思维导图 C编程 要求&#xff1a; 搭建一个货币的场景&#xff0c;创建一个名为 RMB 的类&#xff0c;该类具有整型私有成员变量 yuan&#xff08;元&#xff09;、jiao&#xff08;角&#xff09;和 fen&#xff08;分&#xff09;&#xff0c;并且具有以下功能&#xff1a;…

【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment

论文&#xff1a;https://arxiv.org/abs/2404.16022 代码&#xff1a;https://github.com/ToTheBeginning/PuLID 文章目录 AbstractIntroductionRelated WorkMethods Abstract 我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customizatio…

北航第五次数据结构与程序设计编程题复习

北航第五次数据结构与程序设计编程题复习 树叶节点遍历&#xff08;树-基础题&#xff09;计算器&#xff08;表达式计算-表达式树实现&#xff09;服务优化词频统计&#xff08;树实现&#xff09; 树叶节点遍历&#xff08;树-基础题&#xff09; 【问题描述】 从标准输入中…

Golang的协程调度器GMP

目录 GMP 含义 设计策略 全局队列 P的本地队列 GMP模型以及场景过程 场景一 场景2 场景三 场景四 场景五 场景六 GMP 含义 协程调度器&#xff0c;它包含了运行协程的资源&#xff0c;如果线程想运行协程&#xff0c;必须先获取P&#xff0c;P中还包含了可运行的G…