找最接近的数(极值问题),哪里不对呢?

题目描述
找出一列数字当中找出这样的一个数,比输入的整数 X 更小,但是最接近X的整数。

输入
第一行包含两个正整数 n 和 x,整数n 表示第二行有多少个正整数。
第二行包含n个正整数。(输入会保证至少有一个小于x 的整数)
输出
一行包含一个正整数,表示小于整数x 并且最接近x的数。

样例输入 Copy
5 4
3 2 1 8 7
样例输出 Copy
3

写法如下,把所有小于x的数都数出了,哪里不对啊?

img

应该是没有考虑最接近x这个情况,修改了一下,如下:


#include <iostream>
using namespace std;
int main(){
    int n,x,y;
    cin>>n>>x;
    int nearx=0;
    for(int i=1;i<=n;i++){
        cin>>y;
        if(y<x&&y>nearx)    
            nearx=y;
    }
    cout<<nearx;
    
    return 0;
} 

根据题目要求,可以简单理解为先在一组数据中找到所有比X小的一组数据,再在筛选出的数据中选择最大的那个数据进行输出。所以你应该在筛选完比x小的所有数据后,再在其中输出最大值。