派小森 发表于 2020-6-8 15:12:13

请问一下有没有大佬可以解释一下这个程序什么意思,特别是里面sfind怎么理解,急求!

/*在一个有序序列中,用二分法查找指定元素,若找到返回该值第一次出现的位置,若未找到,
返回0。输入n及n个从小到大排好的有序整数,再输入一个整数x,用二分查找法,查找x是否在
n个整数中出现过,若出现,指出第一次出现的位置;若未出现过,返回0。【输入】第一行:
一个整数,整数的个数n;第二行:n个用空格隔开的有序整数;第三行:一个整数,要找的x;
【输出】一行:一个整数,输出x第一次在所给序列中出现的位置,不存在返回0 */

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a;
int sfind(int a[],int s,int t,int x)
{if(s>t)return 0;
   int mid=(s+t)/2;
   if(x<a)return sfind(a,s,mid-1,x);
   else if(x>a)return sfind(a,mid+1,t,x);
   else{if(mid==s)return mid;//找到,返回位置
                        else if(a==x)return sfind(a,s,mid-1,x);
                                                             else return mid;}}   

int main()
{int n,i,x,k;
   cin>>n;//输入n
       for(i=1;i<=n;i++)cin>>a;//输入n个从小到大排列好的整数
       cin>>x;//输入要查找的整数x
       cout<<sfind(a,1,n,x)<<endl;
       return 0;}

老八秘制 发表于 2020-6-8 15:23:37

怪不得你看不懂,这人写代码的方式本来就让人恶心

派小森 发表于 2020-6-8 15:28:37

老八秘制 发表于 2020-6-8 15:23
怪不得你看不懂,这人写代码的方式本来就让人恶心

考试要考这个题
页: [1]
查看完整版本: 请问一下有没有大佬可以解释一下这个程序什么意思,特别是里面sfind怎么理解,急求!