这个思路不是很难,由于平时练习甚少,还是在细节浪费了一些时间,以后注意细节
:先用二分法找到给定数字,然后找它左面出现几次,右面出现几次,然后相加
#include<stdio.h>
int main(void)
{
int n,a[]={1,2,2,3,4,4,4,4,4,5,6,7,7,7,7,8,9,10,11,11,11,12,13};
int start,end,mid,find,q,h,i=0,j=0;
n=sizeof(a)/sizeof(int);
start=0;
end=n-1;
scanf("%d",&find);//输入要查找的数字
while(start<end)//二分查找
{
mid=(start+end)/2;
if(a[mid]<find) start=mid+1;
else if(a[mid]>find) end=mid-1;
else break ;//找到,退出循环
}
q=h=mid;
while(q*h!=1)//统计个数
{
if(a[q-i]==find) {i++;}//统计左面有几个
else q=-1;
if(a[h+j]==find) {j++;}//统计右面有几个
else h=-1;
}
if(i==0&&j==0) printf("1");//当重复数字只有一个时
else printf("%d",i+j-1);
}