408计算机考研--数据结构--2020年统考真题(C 语⾔)
2020年408统考真题(C 语⾔)
河南京佳公务员考试网⼀、题⽬描述
定义三元组(a,b,c)(a、b、c均为正数)的距离D=|a-b|+|b-c|+|c-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)。
⼆、算法的基本思想
①使⽤D 记录所有已处理的三元组的最⼩距离,初值为⼀个⾜够⼤的整数。
②集合S1、S2和S3分别保存在数组A、B、C中。数组的下标变量i=j=k=0,当i<|S1|、j<|S2|且k<|S3|时(|S|表⽰集合中的元素个数),循环执⾏下⾯的a)~c)。
a)计算(A[i],B[j],C[k])的距离D;(计算D)
b)若D<D ,则D =D;(更新D)
失信被执行人名单查询
c)将A[i]、B[j]、C[k]中的最⼩值的下标+1;
2022年浙江省公务员③输出D ,结束
三、算法实现
#define INT_MAX 0x7fffffff
int abs_(int a){//计算绝对值
if(a<0) return -a;
else return a;
河北大专报名入口
}
bool xls_min(int a,int b,int c){//a 是否是三个数中的最⼩值
if(a<=b&&a<=c) return true;
return false;
}
int findMinofTrip(int A[],int n,int B[],int m,int C[],int p){
河南特岗报名条件
//D_min ⽤于记录三元组的最⼩距离,处置赋为INT_MAX
int i=0,j=0,k=0,D_min=INT_MAX,D;
while(i<n&&j<m&&k<p&&D_min>0){
D=abs_(A[i]-B[j])+abs_(B[j]-C[k])+abs_(C[k]-A[i]);
if(D<D_min) D_min=D;
if(xls_min(A[i],B[j],C[k])) i++;
else if(xls_min(B[j],C[k],A[i])) j++;
考研计算机真题else k++;
}
return D_min;
}min min min min