去哪儿网笔试题

本文详细解析了如何在循环数组中寻找特定元素,并通过实例展示了将字符串转换为特定格式的过程。其中包括循环数组查找特定元素的方法以及将字符串转换为指定格式的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、循环数组查找特定值

解决此问题的难点就是要找到此循环数组的分界点,

如{23,34,41,52,4,8,13,20}这个数组的分界点就是数组下标为3的这个位置。

找到分界点后,再看要找的目标值是在分界点的左边还是右边,再用折半查找法就可以解决问题了。

#include<stdio.h>
int indexOf(int a[], int target, int len)
{
	int i = 0;
	int left = 0;    //left是数组最左边的index
	int right = len - 1;   //right是一个分段上最右边的index 
	int mid = (left + right) / 2;   
	if (!(a[left] <= a[mid] && a[mid] <= a[right]))   //不要!,说明这是正常的顺序递增数组 
	{
		for (i; i < len - 1; i++)
		{
			if (a[i] < a[i+1])
			{
				i++;     //记录分界点位置 
			}
			else
			{
				break;
			} 
		}
	
		if (target >= a[left] && target <= a[i])
		{
			right = i;	
		}
		else{
			left = i + 1;
			right = len - 1;
		}
	}	
	
	//二分法查找
	while(left <= right)
	{
		mid = (left + right) / 2;
		if (target < a[mid])
		{
			right = mid - 1;	
		}
		else if (target > a[mid])
		{
			left = mid + 1;	
		}
		else{
		
			return mid;
		}
	} 
	return -1;
}
int main()
{
	int a[9] = {7, 8, 9, 1, 2, 3, 4, 5, 6};

	int len = sizeof(a) / sizeof(a[0]);
	printf("%d\n", indexOf(a, 4, len));
	
	return 0;
}


二、将ab2c3sb4you2转变为ababcccsbsbsbsbyouyou

#include<stdio.h>
#include<string.h>
int main()
{
	char str[] = "ab2c3sb4you2";
	char end[100] = {'\0'};     //转变后的字符串
	char temp[100] = {'\0'};    //具体数组大小视情况而定
	int i;
	int n = 0;
	for (i = 0; str[i] != '\0'; i++)
	{
		if (str[i] >= '1' && str[i] <= '9')
		{
			int m = 0;
			for (m; m < (str[i] - '0'); m++)
			{
				strcat(end, temp);
			}
			memset(temp, '\0', sizeof(temp));    //清空这个temp数组
			n = 0;
			
		}
		else
		{
			temp[n] = str[i];
			n++;
		}
	
	}
	puts(end);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值