| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 964 人关注过本帖
标题:求数组的距离
只看楼主 加入收藏
BINGQING
Rank: 2
来 自:武汉
等 级:论坛游民
帖 子:98
专家分:75
注 册:2010-3-29
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:4 
求数组的距离
已知两个元素从小到大排雷的数组X[ ]与Y[ ],请写一个程序算出两个数组元素彼此之间差的绝对值中最小的一个,这叫做数组的距离
搜索更多相关主题的帖子: 距离 
2010-04-05 20:56
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:1 

穷举法  数组a[n],b[m] 然后定义一个二维数组 c[m][n] 里是a与b元素的差值
再求 c[m][n]内的最小值

或者 分类讨论   首先判断a[n] b[m]的 最大值 最小值  比如 a内的最大值 小于 b内的最小值
那么 答案就出来了
将 俩数组 合并为一个数组 排序  然后求差 满足 俩差的数分别在a组内和b组内 将差值比较小

目前就想到这两个
2010-04-05 21:19
woodydongli
Rank: 2
等 级:论坛游民
帖 子:57
专家分:84
注 册:2010-4-4
收藏
得分:1 
我想到个方法不知道行不..

       就是把你的一个排好序的,插入到另外一个排好序的..
但是需要用一位来标记,它是另外一个数组的..
然后在新的长的数组里,找,两个相邻的,但是不是同一个数组的数相减,找最小的,应该就是最小距离.不知道对否.
比如.
1  6 7  11
另外一个数组B里是   2  9
把2 9插入进去后是 1 2(B) 6 7 9(B) 11 这时,相邻的不是同一个数组的就有:1 2(B),2(B) 6,7 9(B) ,9(B) 11
用一个数min保存他们的差.min开始时就为1.
2010-04-06 11:15
woodydongli
Rank: 2
等 级:论坛游民
帖 子:57
专家分:84
注 册:2010-4-4
收藏
得分:1 
以下是引用hahayezhe在2010-4-5 21:19:56的发言:


穷举法  数组a[n],b[m] 然后定义一个二维数组 c[m][n] 里是a与b元素的差值
再求 c[m][n]内的最小值

或者 分类讨论   首先判断a[n] b[m]的 最大值 最小值  比如 a内的最大值 小于 b内的最小值
那么 答案就出来了
将 俩数组 合并为一个数组 排序  然后求差 满足 俩差的数分别在a组内和b组内 将差值比较小

目前就想到这两个
我就是想到你的第二个方法,可能好点.
2010-04-06 11:16
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:2 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int dist(int *x,int nx,int *y,int ny) //nx: 数组x的长度,ny:数组y的长度
{
    int dist = abs(x[0]-y[0]);
    int px = 0,py = 0;
    while(px<nx && py<ny)
    {
        if(x[px]==y[py]) return 0;
        if(x[px]<y[py])
        {
            if(dist > abs(x[px]-y[py]))
                dist = abs(x[px]-y[py]);
            px++;
        }
        if(x[px]>y[py])
        {
            if(dist > abs(x[px]-y[py]))
                dist = abs(x[px]-y[py]);
            py++;
        }
    }
    return dist;
}

int main()
{
    int x[] = {1,2,5,7,9};
    int y[] = {3,11,12,18};
    printf("%d\b",dist(x,5,y,4));//check
}

只做了int型的数组,如果是double型时自己将

int dist(int *x,int nx,int *y,int ny) //nx: 数组x的长度,ny:数组y的长度
{
    int dist = abs(x[0]-y[0]);
改为
double dist(double *x,int nx,double *y,int ny) //nx: 数组x的长度,ny:数组y的长度
{
    double dist = abs(x[0]-y[0]);

就可以了

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-06 11:23
快速回复:求数组的距离
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015093 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved