point
绝对值函数:abs();
代码
/**
* 用顺序表实现 王道P19 T14
*
* point:
* 绝对值函数:abs();
* 此题的时间复杂度为 O ( n^3 )
* 空间复杂度为 O ( 1 )
*
* ①算法思想:
* 三层for循环遍历三个集合所有可能的组合,找到所有组合中距离最小的。
*
* ②数据结构:
* typedef struct{
* int data[MaxSize];
* int length;
* }SqList;
*
* ③算法设计
*/
#include <stdio.h>
#include <iostream>
#include <math.h>
#define MaxSize 100
typedef struct{
int data[MaxSize];
int length;
}SqList;
void FindMinDistance(SqList &L1,SqList &L2,SqList &L3){
int MinDistance = abs(L1.data[0] - L2.data[0]) + abs(L2.data[0] - L3.data[0]) + abs(L1.data[0] - L3.data[0]);
int MinDistance_a = L1.data[0];
int MinDistance_b = L2.data[0];
int MinDistance_c = L3.data[0];
for (int i = 0; i < L1.length; ++i) {
for (int j = 0; j < L2.length; ++j) {
for (int k = 0; k < L3.length; ++k) {
if(MinDistance > abs(L1.data[i] - L2.data[j]) + abs(L2.data[j] - L3.data[k]) + abs(L1.data[i] - L3.data[k])){
MinDistance = abs(L1.data[i] - L2.data[j]) + abs(L2.data[j] - L3.data[k]) + abs(L1.data[i] - L3.data[k]);
MinDistance_a = L1.data[i];
MinDistance_b = L2.data[j];
MinDistance_c = L3.data[k];
}
}
}
}
printf("最小距离为:%d\n",MinDistance);
printf("三元组为:( %d , %d , %d )",MinDistance_a,MinDistance_b,MinDistance_c);
return;
}
//以下用于测试
void InitList(SqList &L){
for (int i = 0; i < MaxSize; ++i) {
L.data[i] = 0;
}
L.length = 0;
}
void PrintList(SqList L){
for (int i = 0; i < L.length; ++i) {
printf("%d ",L.data[i]);
}
printf("\n");
}
int main(){
SqList L1 = {{-1,0,9}, 3};
SqList L2 = {{-25,-10,10,11}, 4};
SqList L3 = {{2,9,17,30,41}, 5};
PrintList(L1);
PrintList(L2);
PrintList(L3);
FindMinDistance(L1,L2,L3);
return 0;
}