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");elseprintf("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给到arrBubbl_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.mzph.cn/news/851100.shtml

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

相关文章

标量、向量、矩阵、张量是什么?

参考视频&#xff1a;标量、向量、矩阵、张量-机器学习-李文哲AI人工智能培训_哔哩哔哩_bilibili 参考资料&#xff1a;深度学习基础&#xff1a;标量、向量、矩阵、张量_深度学习本质是矩阵-CSDN博客 标量是一个独立存在的数&#xff0c;比如线性代数中的一个实数5就可以被看…

嵌入式Linux系统编程 — 3.5 utime、utimes、futimens、utimensat函数修改文件时间属性

目录 1 文件的时间属性简介 2 utime()函数 2.1 utime()函数简介 2.2 示例程序 3 utimes()函数 3.1 utimes()函数简介 3.2 示例程序 4 futimens()函数 4.1 futimens()函数简介 4.2 示例程序 5 utimensat()函数 5.1 utimensat()函数简介 5.2 示例程序 1 文件的时间…

react修改本地运行项目的端口

一、描述 如果你想让项目在你想要的端口打开的话&#xff0c;就需要进行设置 二、代码 设置一下pages.json文件就可以了&#xff0c;如下&#xff1a; 如果想打开项目不需要点击下面的链接地址&#xff0c;让他运行npm run dev之后自己直接打开到浏览器的话&#xff0c;在后…

selenium自动化测试入门 —— 上传文件

selenium无法识别非web的控件&#xff0c;上传文件窗口为系统自带&#xff0c;无法识别窗口元素。 上传文件有两种场景&#xff1a;input控制上传和非input控件上传。 大多数情况都是input控件上传文件&#xff0c;只有非常少数的使用自定义的非input上传文件。 一、input控…

2003远程桌面端口修改,远程桌面端口修改的方法有哪些

方法一&#xff1a;通过修改注册表 1、打开注册表编辑器&#xff1a; 打开“开始”菜单&#xff0c;点击“运行”&#xff0c;输入“regedit”&#xff0c;然后按下“Enter”键。 2、导航到远程桌面服务的注册表项&#xff1a; 依次展开以下路径&#xff1a; HKEY_LOCAL_M…

小程序名片怎么生成?AI名片生成器源码系统 为企业店铺创建自己的数字名片

在数字化时代&#xff0c;小程序名片已经成为企业店铺展示自身形象、推广产品和服务的重要工具。分享一个AI名片生成器源码系统春哥AI雷达智能名片小程序系统企业商业运营版&#xff0c;含完整代码包和详细的图文安装部署搭建教程&#xff0c;新手也能轻松使用&#xff0c;源码…

在iPhone上恢复删除Safari历史记录的方法[2024]

您是否正在寻找恢复 iPhone 上已删除的 Safari 历史记录的最佳方法&#xff1f;好吧&#xff0c;这篇文章提供了 4 种在有/无备份的情况下恢复 iPhone 上已删除的 Safari 历史记录的最佳方法。现在按照分步指南进行操作。 iPhone 上的 Safari 历史记录会被永久删除吗&#xff1…

mysql-community-libs-5.7.44-1.el7.x86_64.rpm 的公钥尚未安装

在 CentOS 或 RHEL 系统上安装 RPM 包时&#xff0c;如果遇到“公钥尚未安装”的问题&#xff0c;通常是因为系统没有导入相应的 GPG 公钥。MySQL 官方提供了一个 GPG 公钥&#xff0c;用于验证 RPM 包的签名。 以下是解决该问题的步骤&#xff1a; 下载并导入 MySQL 官方的 GP…

杨校老师项目之基于SpringBoot的理发店的预约管理系统

原系统是SSMJSP页面构成&#xff0c;先被修改为SpringBoot JSP页面 自助下载渠道: https://download.csdn.net/download/kese7952/89417001&#xff0c;或 点我下载 理发师信息&#xff1a; 理发师详细信息 公告信息 员工登录&#xff1a; 管理员登录

【数据结构与算法】使用单链表实现队列:原理、步骤与应用

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 &#x1f384;队列的概念 &#x1f384;为什么要用单链表实现队列 二、单…

基于JSP的健身俱乐部会员管理系统的设计与实现

【免费】基于JSP的健身俱乐部会员管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89416957 基于JSP的健身俱乐部会员管理系统的设计与实现 摘 要 目前我国虽然己经开发出了应用计算机操作的健身俱乐部管理系统&#xff0c;但管理软件&#xff0c;管理方…

【电机控制】FOC算法验证步骤——电流环PI参数、速度环PI参数

【电机控制】FOC算法验证步骤——电流环PI参数、速度环PI参数 文章目录 前言一、电流环PI1.TI手册 二、速度环PI1.TI手册——根据稳定性和带宽计算速度环PI参数2.TI手册——根据阻尼因子计算速度和电流 PI 增益计算速度环PI参数 三、参考文献总结 前言 【电机控制】直流有刷电…

分布式版本控制工具软件——Git概述

目录 一、Git概述1.为什么要学习Git&#xff1f;&#xff08;1&#xff09;SCM概念&#xff08;2&#xff09;SCM实现 2.什么是版本控制&#xff1f;&#xff08;1&#xff09;版本控制软件的基础功能&#xff08;2&#xff09;集中式版本控制&#xff08;3&#xff09;分布式版…

tkinter用按钮实现工具栏

tkinter用按钮实现工具栏 效果代码 使用 Python 的 Tkinter 库&#xff0c;我们可以轻松创建一个包含按钮的工具栏。本文将介绍如何在 Tkinter 中创建一个 简单的工具栏&#xff0c;并演示如何添加功能按钮。 效果 代码 import tkinter as tk from tkinter import ttk, filed…

【内存管理】内存布局

ARM32位系统的内存布局图 32位操作系统的内存布局很经典&#xff0c;很多书籍都是以32位系统为例子去讲解的。32位的系统可访问的地址空间为4GB&#xff0c;用户空间为1GB ~ 3GB&#xff0c;内核空间为3GB ~ 4GB。 为什么要划分为用户空间和内核空间呢&#xff1f; 一般处理器…

【PPT技巧】PPT文件设置了修改权限,如何取消权限编辑文件?

不知道大家在使用PPT文件的时候&#xff0c;是否遇到过下面的提示框&#xff0c;这就是PPT文件设置了修改权限&#xff0c;只有输入密码才可以编辑文件。 如果我们没有输入密码&#xff0c;以只读方式进入&#xff0c;那么我们会发现功能栏中的按钮全是灰色&#xff0c;无法使用…

Spring AOP 基于注解实现用户权限校验

主要注解 interface&#xff1a;继承了 Annotation 接口的自定义注解&#xff0c;定义注释类型。 Target&#xff1a;表示这个注解可以应用的地方&#xff0c;此处做权限校验是用在方法上的&#xff0c;所以此处的值为 Target(ElementType.METHOD) …

vue-cli是什么?和 webpack是什么关系?

前言 Vue CLI是Vue.js项目的官方脚手架&#xff0c;基于Node.js与Webpack构建。安装Vue CLI前需确保Node.js已安装&#xff0c;随后通过npm全局安装。Vue CLI能迅速创建和管理Vue.js项目&#xff0c;提升开发效率。而Webpack则负责资源打包&#xff0c;通过配置文件管理依赖、插…

自然语言处理:第三十四章Lora VS FineTuning

文章链接: [2405.09673] LoRA Learns Less and Forgets Less (arxiv.org) 这是一篇来自哥伦比亚大学和databricks对Lora 和FineTuning 更深一步的研究。有关于Lora可以参考我之前的文章: 自然语言处理: 第十二章LoRA解读_lora自然英语处理-CSDN博客 有关于fine_tuning 可以参考…

图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…