解题思路:将先第一数组储存起来 输入第二数组时 每输入一位输入 去与第一数组元素遍历找到 当前最优数组距离(优化:因为数组元素为单调递增所以距离的结果也为单调 如果当前处理与第一数组的元素大于前面处理过的则单调性破坏break跳出不用处理后面 后面的距离必然越来越大)
注意事项:

参考代码:

#include <stdio.h>
#include <stdlib.h>
long int abss(long int s)//绝对值
{
    if(s<0)return -s;
    else return s;
}
int main()
{
    long int m,n,i,j,s,jl,ans,flag=0; 
    long int f[1001];
    scanf("%ld%ld",&m,&n);
    for(i=0;i<m;i++)
   scanf("%ld",&f[i]);
    for(i=0;i<n;i++)
    { scanf("%ld",&s);
        if(!flag)                     
        {   for(j=0;j<m;j++)
             if(abss(s-f[j])<ans||j==0)ans=abss(s-f[j]);//求距离所以用绝对值
             else break;  //优化(单调性被破坏,上一个点位 极值点)
             if(ans<jl||i==0)jl=ans;
             if(jl==0||s>f[m-1])flag=1;  //如果第二个数组的第一个(或任意)元素
                                        //大于第一个数组的最后一个元素 
        }                               //那么距离就是只能jl=s-f[m-1] flag标记 后面不用处理
        
    }
    printf("%ld\n",jl);
    return 0;
}


点赞(5)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论