【2020统考真题】定义三元组(a.b.c)(a. b. c均为整数)的距离D=|a-bl + |b-c| +Ic-a|。给定3个非空整数集合S1、S2,和S3,,按升序分别存储在3个数组

【2020统考真题】定义三元组(a.b.c)(a. b. c均为整数)的距离D=|a-bl + |b-c| +Ic-a|。给定3个非空整数集合S1、S2,和S3,按升序分别存储在3个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c)(a∈S1, b∈S2,c∈S3;)中的最小距离。例如S1={-1,0,9},S2={-25,-10,10,11}, S3 ={2,9,17,30,41},则最小距离为2,相应的三元组为(9,10,9)

代码思路:
我很简单,就暴力三层循环,计算出所有最小距离,每次出现新的最小距离,更新三元组信息。

int abs(int a, int b) {//返回|a-b|
	return a > b ? a - b : b - a;
}
void findThree(int A[],int Alen, int B[], int Blen,int C[], int Clen) {
	int i = 0;
	int j = 0;
	int k = 0;
	int index1 = 0;//标记最小三元组下标位置
	int index2 = 0;
	int index3 = 0;
	int min = abs(A[0], B[0]) + abs(B[0], C[0]) + abs(A[0], C[0]);
	for (i = 0;i < Alen;i++) {
		for (j = 0;j < Blen;j++) {
			for (k = 0;k < Clen;k++) {
				int tmp= abs(A[i], B[j]) + abs(B[j], C[k]) + abs(A[i], C[k]);
				if (tmp < min) {
					min = tmp;
					index1 = i;
					index2 = j;
					index3 = k;
				}
			}
		}
	}
	printf("三元组为(%d,%d,%d)", A[index1], B[index2], C[index3]);
}

int main() {
	int A[3] = { -1,0,9 };
	int B[4] = { -25,-10,10,11 };
	int C[5] = { 2,9,17,30,41 };
	findThree(A, 3, B, 4, C, 5);
	return 0;
}

【2020统考真题】定义三元组(a.b.c)(a. b. c均为整数)的距离D=|a-bl + |b-c| +Ic-a|。给定3个非空整数集合S1、S2,和S3,,按升序分别存储在3个数组_第1张图片

你可能感兴趣的:(数据结构代码汇总,算法,三元组,数据结构,C语言)