题目
在一个非降序列中,查找与给定值最接近的元素。若有多个值满足条件,输出最小的一个。
查找方式
要找给定值m最接近的元素,不妨从m的两旁开始找起。
#include <iostream>
#include <map>
using namespace std;
bool isContain(int* a,int len, int target) {
for (int i = 0; i < len; i++)
{
if (target == a[i]) {
return true;
}
}
return false;
}
int max1(int* a,int len) {
int max = a[0];
for (int i = 1; i < len; i++)
{
if (a[i] > max) {
max = a[i];
}
}
return max;
}
int min1(int* a,int len) {
int min = a[0];
for (int i = 1; i < len; i++)
{
if (a[i] < min) {
min = a[i];
}
}
return min;
}
int main()
{
int a[] = { 1,3,5,7,9,11,13,15,17 };
int len = sizeof(a) / sizeof(int);
int m = 100;
//m+-1 m+-2 m+-3
//if m+1在a中,输出m+1,结束
//if m+2在a中,输出m+2,结束
for (int i = 0; m-i>=min1(a,len)||m+i<=max1(a,len); i++)
{
if (isContain(a, len, m - i)) {
cout << m - i << endl;
break;
}
if (isContain(a, len, m + i)) {
cout << m + i << endl;
break;
}
}
}