欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

查找最接近的元素c语言,查找最接近的元素

发布时间:2025/3/15 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 查找最接近的元素c语言,查找最接近的元素 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

这是到挺有意思的题,做为饭后消食还是不错的选择

首先题目说不降序列也就是说序列是有序的呢就好办了,直接二分

分析易知,和一个数\(x\)最接近的数只有三种情况

大于\(x\)的数中最小的

小于\(x\)的数中最大的

\(x\)本身

首先我这么懒的人肯定是不想手写二分的所有目光自然就落了lower_bound()和 upper_bound()上

然后upper_bound()得到的结果是大于\(x\)的数中最小的,所以upper_bound()更合适

呢么令\(t\)是二分出来的数的下标,呢么\(t-1\),要么就是\(x\),要么就是小于\(x\)的数中最大的,比较一下就好

#include

using namespace std;

const int N = 100005;

int n , m , a[N] , t , s ;

inline int read()

{

register int x = 0;

register char ch = getchar();

while( ch < '0' || ch > '9' ) ch = getchar();

while( ch >= '0' && ch <= '9' )

{

x = ( x << 1 ) + ( x << 3 ) + ch - '0';

ch = getchar();

}

return x;

}

int main()

{

n = read();

for( register int i = 1 ; i <= n ; i ++ ) a[i] = read();

m = read();

for( register int i = 1 ; i <= m ; i ++ )

{

s = read();

if( s < a[1] )

{

printf( "%d\n" , a[1] );

continue;

}

if( s > a[n] )

{

printf( "%d\n" , a[n] );

continue;

}

t = upper_bound( a + 1 , a + 1 + n , s ) - a;

if( a[t] - s < s - a[t - 1] ) printf( "%d\n" , a[t] );

else printf( "%d\n" , a[ t - 1 ] );

}

return 0;

}

总结

以上是生活随笔为你收集整理的查找最接近的元素c语言,查找最接近的元素的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。