刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

最近的数

给定一个整数 X 和一个长度为 N 的整数序列 p1、p2、……、pN。请找出不在该序列中的整数(不一定为正数)中,与 X 的差的绝对值最小的那个整数。若存在多个满足条件的整数,则输出其中最小的一个。

时间限制:1000ms,内存限制:256MB

输入格式

第一行:两个整数 X、N;

第二行:N 个整数表示 p1、p2、……、pN

注意:当 N = 0 时,第二行为空行。

输出格式

输出满足条件的整数。


输入样例#1

6 5
4 7 10 6 5

输出样例#1

8

输入样例#2

6 5
4 7 8 6 5

输出样例#2

3

数据范围:

0≤ N < 100;1≤X、pi<100。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

对于这个问题,我们可以采用二分查找的方式来解决。由于题目中给定的数据范围比较小,我们可以根据给定的序列构建一个二分查找的区间。假设序列中的最小值为min,最大值为max,那么我们的查找区间就是[min, max]。接下来进行二分查找,对于每个中间值mid,计算其与目标数X的差的绝对值,并与之前的差的绝对值最小的值进行比较更新。同时要注意处理等于的情况。当找不到满足条件的数时,返回区间左端点作为答案。具体的实现细节可以在代码中体现。

解析:

这个问题要求我们找到一个不在给定序列中的整数,它与目标数X的差的绝对值最小。为了解决这个问题,我们可以使用二分查找的方法。二分查找的基本思想是在有序序列中通过不断缩小查找范围来找到目标值。在这个问题中,我们可以将给定的序列视为一个有序序列,然后在这个序列的范围内进行二分查找。具体的步骤如下:

  1. 首先确定二分查找的区间。根据给定的序列中的最小值和最大值来确定这个区间。在这个例子中,我们的查找区间是[min, max]。

  2. 进行二分查找。在每次迭代中,计算中间值mid,然后判断目标数X与mid的差的绝对值。如果这个差的绝对值比之前记录的差的绝对值小或者等于(当找不到满足条件的数时),那么更新这个差的绝对值并继续查找。否则,根据比较结果调整查找区间。

  3. 当找不到满足条件的数时,返回区间左端点作为答案。因为在有序序列中,满足条件的数一定存在于区间左端点的右侧。因此返回左端点可以确保找到满足条件的数中最小的一个。具体的实现细节可以在代码中体现。需要注意的是,当处理等于的情况时,我们需要特别处理以确保返回正确的答案。

在C语言中实现这个算法时,需要注意处理输入和输出的格式,以及处理边界情况。同时要注意二分查找的细节,确保算法的正确性和效率。

创作类型:
原创

本文链接:最近的数 给定一个整数 X 和一个长度为 N 的整数序列 p1、p2、……、pN。请找出不在该序列中

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share