应届生笔试编程题

本文提供了八道编程题目,涵盖查找、递归和排序等核心编程概念。第一题要求高效判断关键字在无规律递增数组中的位置;第二题找出数组中第K大的数;第三题找出字符串中连续最长的英文字母串;第四至六题涉及不同场景下的递归应用;最后两题分别要求用指针实现冒泡排序和将两个有序数组归并。
摘要由CSDN通过智能技术生成

第一题:查找

有一个数组a[n],数组中的数据是一个无规律的递增数,请写出一个函数用最高效的方式判段关键字num是否在这个数组中。如果存在则返回该数所在数组中的位置,如果不存在则返回0XFFFFFFFF(假定数组长度小于这个值)。

例如:

Int a[]={1,2,3,4,555,666,888,......,444444};

FindNumber(a,sizeof(a)/sizeof(a[0]),3);返回值为2.

解析:


/*斐波那契查找*/  
int F(int i)
{
	if(i<2)
		return i==0? 0:1;
	return F(i-1)+F(i-2);
}
int Fibonacci_Search(int *a,int n,int key)
{
	int low=1,high=n,mid,i,k=0;
	while(n>F(k)-1)             /*计算n位于斐波那契数列的位置*/
		k++;
	for(i=n;i<F(k)-1;i++)       /*将不满的数值补全*/
		a[i]=a[n];

	while(low<=high)
	{
		mid=low+F(k-1)-1;
		if (key<a[mid])
		{
			high=mid-1;
			k=k-1;
		}
		else if (key>a[mid])
		{
			low=mid+1;
			k=k-2;
		}
		else
		{
			if(mid<=n)
				return mid;
			else
				return n;
		}
	}
	return -1;
}
int main(void)
{
	int a[100]={0,1,16,24,35,47,59,62,73,88,99};
	int fibonacci_i=Fibonacci_Search(a,11,59);
	printf("fibonacci_i=%d\n",fibonacci_i);
	return 0;
}

第二题:查找

写一段程序,找出数组中第K大大小的数,输出数所在的位置。例如{2,4

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值