這個思路不是很難,由於平時練習甚少,還是在細節浪費了一些時間,以後注意細節
:先用二分法找到給定數字,然後找它左面出現幾次,右面出現幾次,然後相加
#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);
}