【经典问题】在已知两个从小到大有序的数表中寻找都出现的第一个元素


1、题目

在已知两个从小到大有序的数表中寻找都出现的第一个元素

2、代码

/*******************************************************************************************************
** 题    目: 在已知两个从小到大有序的数表中寻找都出现的第一个元素
********************************************************************************************************/
#include <stdio.h>
#include <conio.h>

int *search(int *pa,int *pb,int an,int bn)
{
	int *ca,*cb;
	
	/* 为ca、cb设定初值 */
	ca = pa;
	cb = pb;
	
	while ((ca<pa+an) && (cb<pb+bn))	/*两个数表都未考察完*/
	{
		/* 在两个数表中找下一个相等的元素 */
		if(*ca<*cb)		/*数表1的当前元素<数表2的当前元素*/
		{
		    ca++;		/*调整数表1的当前元素指针*/
		}
		else if(*ca>*cb)/*数表1的当前元素>数表2的当前元素*/
		{
		    cb++;		/*调整数表2的当前元素指针*/
		}
		else			/*数表1的当前元素==数表2的当前元素*/
		{
			return ca;	/*返回在这两个数表中找到相等元素*/
		}
	}
	return NULL;
}

// 主函数
int main(void)
{
	int *vp,i;
	int a[ ]={1,3,5,7,9,13,15,27,29,37};
	int b[ ]={2,4,6,8,10,13,14,27,29,37};
	puts("The elements of array a is:");
	for (i = 0; i<sizeof(a)/sizeof(a[0]); i++)
	{
		printf(" %d",a[i]);
	}
	puts("\nThe elements of array b is:");
	for (i = 0; i < sizeof(b)/sizeof(b[0]); i++)
	{
		printf(" %d",b[i]);
	}
	vp = search(a, b, sizeof(a)/sizeof(a[0]), sizeof(b)/sizeof(b[0]));
	if(vp) 
	{
		printf("\nThe first same number in both arrays is %d\n",*vp);
	}
	else 
	{
		printf("Not found!\n");
	}
	puts("\n Press any key to quit...\n");
	getch();
}

运行结果



文章作者: 杂烩君
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 杂烩君 !
  目录