一、题目描述
定义三元组(a,b,c)(a,b,c均为正数)的距离D=|a-b|+|b-c|+|c-a|。 给定3个非空整数集合S1、S2和S3,按升序分别存储在3个数组中。请设计一个尽可能高效的算法 计算并输出所有可能的三元组(a,b,c)(a )中的最小距离。 例如S1={1,0,9},S2={-25,-10,10,11},S3={2,9,17,30,41},则最小距离为2,相应的三元组为(9,10,9)。
二、算法步骤
建议直接暴力,省时好拿分hh。利用三重循环,分别循环每个数组的元素,然后计算距离,不断更新最短距离并记录对应的三元组即可。
#include
#include
#include
using namespace std;
const int N = 10;//假设最大的数组长度为10
int n,m,p;
int a[N], b[N],c[N];
int distance(int a, int b, int c)
{
return abs(a - b) + abs(a - c) + abs(b - c);
}
int main()
{
cin >> n >> m >> p;
for (int i = 0; i < n; i++) { cin >> a[i]; }
for (int i = 0; i < m; i++) { cin >> b[i]; }
for (int i = 0; i < p; i++) { cin >> c[i]; }
int ans = 0x3f3f3f3f;//存放答案
int t1 = 0, t2 = 0, t3 = 0;//存放三元组
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
for (int k = 0; k < p; k++)
{
int temp = distance(a[i], b[j], c[k]);
if (ans >= temp)
{
ans = temp;
t1 = a[i];
t2 = b[j];
t3 = c[k];
}
}
}
}
cout << ans<
结果展示:
```cpp
3 4 5
-1 0 9
-25 -10 10 11
2 9 17 30 41
2
三元组为:9 10 9
# 三、总结
本题可以有很好的解法,参考[2020年专业408的算法题](https://fanxinglanyu.blog.csdn.net/article/details/108805852 "2020年专业408的算法题")
- THE END -
最后修改:2024年2月4日