蓝桥杯 找数1

蓝桥杯## 找数1

资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
  找数1
  【问题描述】在一个小到大的有序序列中(不存在重复数字),查找某个数所在的位置。如果该数不在该数列中,输出“NO ANSWER"。
输入说明
  第一行输入N表示有N个数据(N<=1000)
  第二行N个小到大非重复的数字(<=30000)
  第三行数字X,查找X
输出说明
  若X在序列中则输出其相应的位置,若不在序列中则输出”NO ANSWER".
样例输入
10
12 34 56 78 88 99 101 134 145 233
88
样例输出
5
样例输入
10
23 34 56 78 99 123 143 155 167 178
128
样例输出
NO ANSWER
说明:保证输入数据是有序的。
请用子程序函数来设计二分查找,采用递归与非递归方式

#include<iostream>
using namespace std; 
void zhaoshu(int x,int length,int a[])
 {
 	int l=0;
 	int mid;
 	int h=length-1;
 	while(l<=h)
 	{
 		mid=l+((h-l)/2);
 		if(x<a[mid])
 		h=mid-1;
 		else if(x>a[mid])
 		l=mid+1;
 		else
 		{
 			cout<<mid+1;
 			break;/*存在并找到数字,跳出循环*/
 		}
	 }
	if(x!=a[mid])
	{
		cout<<"NO ANSWER";
	}
}
int main()
{
	int n,x,a[1010];
	cin>>n;
	for(int i=0;i<n;i++)
	cin>>a[i];
	cin>>x;
	zhaoshu(x,n,a);
	return 0;
 } 

我们利用二分查找来做这种题,我个人是采用非递归并且将一个数组进行到底,当然你也可以每一次循环完把数字赋值给新的数组。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的太白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值