查找最接近的元素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语言,查找最接近的元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql可以使用mybaties框架吗
- 下一篇: 【CSDN】图片居中与调整大小