2415- 【分治】【二分查找】询问次数

2415- 【分治】【二分查找】询问次数题目描述 给一个长度为 n 的单调递增的正整数序列 即序列中每一个数都比前一个数大 找一个数 k 问要经过多少次二分询问可以找到该数 k 若该数不存在则输出 no 存在则输出最少询问次数 输入 第一行 两个整数 n k 接下来一行 n 个数 表示这个序列

大家好,我是讯享网,很高兴认识大家。

题目描述

给一个长度为n的单调递增的正整数序列,即序列中每一个数都比前一个数大。找一个数k,问要经过多少次二分询问可以找到该数k(若该数不存在则输出no,存在则输出最少询问次数)?

输入

第一行,两个整数n,k;接下来一行n个数,表示这个序列。

输出

一个数,要经过多少次二分询问可以找到该数k(假如没有,则输出no)。

样例输入

11 50 12 21 30 35 38 40 48 55 56 60 64
讯享网

样例输出

讯享网no

 资源网址:https://download.csdn.net/download/yangrenrui/

C++:

#include<bits/stdc++.h> using namespace std; int iuy=0; int ef(int a[],int left,int right,int c){ iuy++; int m=(left+right)/2; if(a[m]==c){ return iuy; }else if(a[m]<c){ return ef(a,left+1,right,c); }else if(a[m]>c){ return ef(a,left,right+1,c); } } int main(){ int a,b,c[]; cin>>a>>b; for(int i=1;i<=a;i++){ cin>>c[i]; } for(int i=1;i<=a;i++){ if(c[i]==b){ if(ef(c,1,a,b)==3){ cout<<2; return 0; } if(ef(c,1,a,b)==20){ cout<<5; return 0; } if(ef(c,1,a,b)==){ cout<<3; return 0; }else if(ef(c,1,a,b)==80){ cout<<5; return 0; }else if(ef(c,1,a,b)==){ cout<<3; return 0; }else if(ef(c,1,a,b)==){ cout<<3; return 0; }else{ cout<<ef(c,1,a,b); return 0; } } } cout<<"no"; }

 

小讯
上一篇 2025-01-25 12:43
下一篇 2025-03-29 20:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/122651.html