求三个有序数组的公共元素

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

//把数组A,B相同的元素存进数组C
void findComElement(int *A,int *B,int *C,int n1,int n2,int *p)
{
	int i = 0 , j = 0 , k = 0;
	while (i < n1 && j < n2)
	{
		if (A[i] < B[j])
			i++;
		else if (A[i] == B[j])
		{
			C[k] = A[i];
			while (i < n1 && j < n2 && (A[i] == C[k] || B[j] == C[k]))
			{
				if (A[i] == C[k])
					i++;
				if (B[j] == C[k])
					j++;
			}
			k++;
		}
		else
			j++;
	}
	*p = k;
}

int main()
{
	int A[20] = { 1,2,3,4,5,6,7,9,9 };  //长度9
	int	B[20] = { 2,3,5,7,8,9,9,15 };	//长度8
	int C[20] = { 2,5,7,8,9,9 };//长度6
	int D[20];//记录A,B的公共元素
	int E[20];//记录A,B,C公共元素

	int k = 0;
	findComElement(A , B , D , 9 , 8 , &k);
	findComElement(D , C , E , 9 , 8 , &k);
	for (int i = 0; i < k; i++)
		printf("%d " , E[i]);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43496435/article/details/113804697