美文网首页C语言
郑州轻工业大学oj题解(C语言)1200: 数组的距离

郑州轻工业大学oj题解(C语言)1200: 数组的距离

作者: 缘点点 | 来源:发表于2020-02-19 20:34 被阅读0次

    1200: 数组的距离

    • 题目描述
      已知元素从小到大排列的两个数组x[]和y[],请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离
    • 输入
      第一行为两个整数m, n(1≤m, n≤1000),分别代表数组f[], g[]的长度。
      第二行有m个元素,为数组f[]。
      第三行有n个元素,为数组g[]。
    • 输出
      数组的最短距离
    • 参考代码:
    #include<bits/stdc++.h>
    using namespace std;
     
    int main()
    {
        int m,n,a[1001],b[1001],i,j,min;
        scanf("%d %d",&m,&n);
        for(i=0;i<m;i++){
            scanf("%d",&a[i]);
        }
        for(j=0;j<n;j++){
            scanf("%d",&b[j]);
        }
        min=fabs(a[0]-b[0]) ;
            for(i=0;i<m;)
                for(j=0;j<n;)
            {
                if(fabs(a[i]-b[j+1])<min&&j+1<m)//比其小的情况
                {
                    min = fabs(a[i]-b[j+1]);
                    j++;
                }
                else if(fabs(a[i+1]-b[j])<min&&i+1<n)//比其大的情况
                {
                    min = fabs(a[i+1]-b[j]);
                    i++;
                }
                else
                {
                    i++;
                    j++;
                    if(fabs(a[i]-b[j])<min)
                        min=fabs(a[i]-b[j]);
                }
                if(i==m-1||j==n-1)
                    break;
            }
            printf("%d",min);
            return 0;
    }
    
    • 代码解析:
      理清题目脉络,不是什么复杂的题目。一共有两个数组,都是从小到大排列,那么数组里的其中一个数,与另外一个数组的数一起比较,我们根据它大或小的情况,往前或往后推即可。在题目中我注释出了这两种比较。第三种是恰好相等的情况,这种情况距离为0,我们按步骤退出break循环输出即可。

    代码只是看起来复杂而已,总体来说是非常好理解的,可以讲的点也不多,建议是根据题意判断代码。最重要的是逻辑要清晰,要分清数组的变化关系!

    相关文章

      网友评论

        本文标题:郑州轻工业大学oj题解(C语言)1200: 数组的距离

        本文链接:https://www.haomeiwen.com/subject/nsdzfhtx.html