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循环输出即可。
代码只是看起来复杂而已,总体来说是非常好理解的,可以讲的点也不多,建议是根据题意判断代码。最重要的是逻辑要清晰,要分清数组的变化关系!
网友评论