Honeypot2020 2021-05-21 23:21 采纳率: 72.7%
浏览 62
已采纳

二分查找法用for循环的实现,结果只能输出3,换个数就找不到求解答。

#include<stdio.h>
int main(void)
{
    int arr[]={1,2,3,4,5};
    int len=sizeof(arr)/sizeof(arr[0]);
    int left=arr[0];
    int right=len-1;
    int number=2;
    int mid=(left+right)/2;
    int i;
    for(i=0;i!=arr[mid];i++)
    {
        if(number>arr[mid])
        {
            left=mid+1;
        }
        else if(number<arr[mid])
        {
            right=mid-1;
        }
    }
    if(number==arr[mid])
    {
        printf("找到了 %d\n",arr[mid]);
    }
    else
    {
        printf("找不到\n");
    }
}

  • 写回答

6条回答 默认 最新

  • 小兔子编程 青少年编程领域优质作者 2021-05-21 23:46
    关注

    mid=(left+right)/2  这句要放在for循环里面,修改一下就可以了

    #include<stdio.h>
    int main(void)
    {
        int arr[]={1,2,3,4,5};
        int len=sizeof(arr)/sizeof(arr[0]);
        int left=arr[0];
        int right=len-1;
        int number=2;
        int mid=0;
        int i;
        for(i=0;i!=arr[mid];i++)
        {
    		mid=(left+right)/2;
            if(number>arr[mid])
            {
                left=mid+1;
            }
            else if(number<arr[mid])
            {
                right=mid-1;
            }		
        }    
    	if(number==arr[mid])
        	{
           	 	printf("找到了 %d\n",arr[mid]);
       		}
        	else
        	{
            	printf("找不到\n");
        	}
    }
    
    

    运行结果:

    找到了 2

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集