数组的距离

1.1k 词

题目描述

已知元素从小到大排列的两个数组$f[]$和$g[]$,请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离

输入

第一行为两个整数m, n($1≤m$, $n≤1000$),分别代表数组$f[]$, $g[]$的长度。
第二行有m个元素,为数组f[]。
第三行有n个元素,为数组g[]。

输出

数组的最短距离

样例输入

1
2
3
5 5
1 2 3 4 5
6 7 8 9 10

样例输出

1
1

题解

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<bits/stdc++.h>
using namespace std;
int abs(int s);
int main()
{
int a[10000],b[10000],c,d,i,n,min=99999,t;
cin>>c>>d;
for(i=0;i<c;i++)
{
cin>>a[i];
}
for(n=0;n<d;n++)
{
cin>>b[n];
}
for(i=0;i<c;i++)
{
for(n=0;n<d;n++)
{
t=abs(a[i]-b[n]);
if(t<min)
{
min=t;
}
}
}
cout<<min;
return 0;
}
int abs(int s)
{
if(s<0)
return -s;
else
return s;
}

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
int m = sc.nextInt();
int[] b = new int[m];
int d = 1000;
for (int i = 0; i < n; i++) a[i] = sc.nextInt();
for (int j = 0; j < m; j++) b[j] = sc.nextInt();
for (int k : a)
for (int i : b) {
int s = k - i;
d = Math.min(d, Math.abs(s));
}
System.out.println(d);
}
}