有8瓶水,其中有一瓶有毒,最少尝试几次可以找出来
解题思想:1234瓶水倒一起,如果中毒,则说明在这里 然后12瓶混在一起,如果没中毒,试试3,大概就是这个思路,我写了一个代码有问题,求大神帮帮忙
#include <iostream>
using namespace std;
void BinarySearch(int high,int low,int a[]);
int count=0;
int flag=0;
void main()
{ int size =8;
cout<<"|--------有8瓶水,其中有一瓶有毒,最少尝试几次可以找出来---------|"<<endl;
cout<<"|--------有毒扣1,无毒扣0---------|"<<endl;
int a[8];
for(int i=0;i<size;i++){
cout<<"输入第"<<i+1<<"瓶水是否有毒"<<endl;
cin>>a[i];
}
int high=size-1,low=0;
BinarySearch(high,low,a);
}
void BinarySearch(int high,int low,int a[]){
int mid;
while (high>low)
{
int temp1=high,temp2=low;
count++;
mid = (low + high)/2;
int sum=0;
for(int i=low;i<=mid;i++){
sum+=a[i];
}
if(sum==1){
BinarySearch(mid-1,temp2,a);
temp1=mid;
}
else{
BinarySearch(temp1,mid+1,a);
temp2=mid;
}
}
if(low==high&&flag==0)
{
cout<<count<<endl;
flag=1;
}
}