上题目:
我的答案:
#include<stdio.h>
#include<math.h>
int mindist(int a[],int la,int b[],int lb);
int main()
{
int a[] = {1,3,5,7,9};
int b[] = {2,6,8};
printf("The mindist is %d\n",mindist(a,sizeof(a) / sizeof(a[0]),b,sizeof(b) / sizeof(b[0])));
return 0;
}
int mindist(int a[],int la,int b[],int lb)
{
int i,j;
int min = abs(a[0] - b[0]);
i = j = 0;
while(i < la && j < lb)
{
if(a[i] < b[j])
{
i++;
}
else if(a[i] > b[j])
{
j++;
}
else
{
i++;
j++;
}
if(abs(a[i] - b[j]) < min)
min = abs((a[i] - b[j]));
}
return min;
}
标准答案:
#include<limits.h>
#define min(x,y) ((x) < (y) ? (x) : (y))
int min_distance(int x[],int y[],int m,int n)
{
int minimum = INT_MAX;
int index_x,index_y;
index_x = index_y = 0;
while(index_x < m && index_y < n)
{
if(x[index_x] >= y[index_y])
{
minimum = min(minimum,x[index_x] - y[index_y]);
index_y++;
}
else
{
minimum = min(minimum,y[index_y] - x[index_x]);
index_x++;
}
}
return minimum;
}
可以说和标准答案之间差的不是很多吧。但还是有不一样的地方的,比如:
标准答案用了INT_MAX,我觉得不是很有必要,你们说呢?
另外我没有使用宏,这让我的程序多次计算a[i]-b[j]的值(为了省变量),会不会让程序慢?
不管怎么说,还是答案写的好,学习。