c++连续输入数字,以空格分隔,回车结尾

【问题描述】给定一个有序的整数序列以及一个正整数,利用递归进行二分查找,判断该正整数是否在该序列当中

           如果在,则输出yes,不在则输出no

输入形式】1 3 7 10 12

           5

【输出形式】no
【样例输入】1 3 7 10 12          

           10

【样例输出】yes

【样例输入】2 4 9 12 14 21        

           11

【样例输出】no

问题比较简单,但是输入忘记了不会

两种方法

第一种:

#include <bits/stdc++.h>
using namespace std;
int a[100];
void f(int x,int left,int right){
	if(left==right){
		if(a[left]==x)cout<<"yes";
		else cout<<"no";
		return;
	}
	int mid=(left+right)/2;
	if(a[mid]==x){
		cout<<"yes";
		return;
	}
	if(a[mid]>x)
	f(x,left,mid-1);
	if(a[mid]<x)
	f(x,mid+1,right);
}
int main() {
	int k = 0,i=0,x;
	while (cin >> k) {
      a[i]=k;
      i++;
		if (cin.get() == '\n') break;
	}
	cin>>x;
	f(x,0,i-1);
	return 0;
}


第二种 用的是大二下学期学的istringstream

#include <bits/stdc++.h>
using namespace std;
int a[100];
void f(int x,int left,int right){
	if(left==right){
		if(a[left]==x)cout<<"yes";
		else cout<<"no";
		return;
	}
	int mid=(left+right)/2;
	if(a[mid]==x){
		cout<<"yes";
		return;
	}
	if(a[mid]>x)
	f(x,left,mid-1);
	if(a[mid]<x)
	f(x,mid+1,right);
}
int main() {
    string st1;
    getline(cin,st1);
    istringstream iss(st1);
    int x,k,i=0;
    while(iss>>k){
    	a[i]=k;
    	i++;
	}
	cin>>x;
	f(x,0,i-1);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值