数据结构——第二章线性表·2020真题

MiracleWolf 2024-2-4 96 2/4

一、题目描述

定义三元组(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 -

MiracleWolf

2月04日23:58

最后修改:2024年2月4日
0