• AOJ.176 两数组最短距离 (乱搞题)


    两数组最短距离

    点我挑战题目

    题意分析

    给出2个数组,让求出2个数组元素差的绝对值的最小值是多少。
    我这里是o(m+n)的算法。首先对于第一个数组,让他的第一个元素和第二个元素比较,如果他的第一个元素比另一个数组的第一个元素大,那么首先记录一下差值,然后判断数组的下一个元素(即i++)。反之判断记录差值并且判断另一个数组的下一个元素(j++),直到将两个数组都遍历一遍,差值所保存的结果是就是最后的最短距离。
    当然还有o(n*m)的算法。那就是暴力,将第一个数组的第一个元素依次和第二个数组的每个元素做差值比较,然后记录最小值;接着计算第二个元素和第二个数组的每个元素的差值,并记录最小值,直到遍历完第一个数组,输出差值即可。

    /*
        Title:AOJ.176
        Author:pengwill
        Date:2016-11-28
    */
    #include <stdio.h>
    #include <stdio.h>
    #include <math.h>
    #define max 1005
    int main()
    {
        int m,n;
        int a1[max],a2[max];
        while(scanf("%d %d",&n,&m) != EOF){
            int i;
            for(i = 0;i<n;i++){
                scanf("%d",&a1[i]);
            }
            for(i = 0;i<m;i++){
                scanf("%d",&a2[i]);
            }
            int j,ret ;
            i = j = 0;
            ret = -1;
            while(i<n&&j<m){
                if(a1[i]>a2[j]){
                    if(ret == -1 || ret > fabs(a1[i]-a2[j])){
                        ret = fabs(a1[i]-a2[j]);
                    }
                    j++;
                }else if(a1[i]<a2[j]) {
                    if(ret == -1 || ret > fabs(a1[i]-a2[j])){
                        ret = fabs(a1[i]-a2[j]);
                    }
                    i++;
                }else if(a1[i] == a2[j]) {
                    ret = 0;
                    break;
                }
            }
            printf("%d
    ",ret);
        }
        return 0;
    }
    
  • 相关阅读:
    实验一、DOS使用命令实验
    实验三、进程调度模拟程序
    实验四、存储管理
    实验二、作业调度模拟程序
    简单的DOS命令
    结构化方法和面向对象方法的比较
    jstree 取消选中父节点
    T4 模板代码生成
    基于Open XML 导出数据到Excel
    菜单(列存储转为行存储)
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367189.html
Copyright © 2020-2023  润新知