有8瓶水,其中有一瓶有毒,最少尝试几次可以找出来

Mr__Arthur 2017-06-22 07:17:07
解题思想: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;
}
}
...全文
2064 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljheee 2017-06-26
  • 打赏
  • 举报
回复
想问的是,程序如何判断其中有一瓶有毒
真相重于对错 2017-06-23
  • 打赏
  • 举报
回复
引用 2 楼 jiht594 的回复:
谁来喝水? 自己一个人的话, 1234混合一起, 有毒的话. 你中毒之后, 再喝毒水就没用了. 你不知道是上次还是这次的毒 8个人的话, 一次就知道了.
程序员的脑子难道会这么死吗? 1、他这个只是要求一个程序。 2、不能拿一个白鼠来做实验?
jiht594 2017-06-23
  • 打赏
  • 举报
回复
谁来喝水? 自己一个人的话, 1234混合一起, 有毒的话. 你中毒之后, 再喝毒水就没用了. 你不知道是上次还是这次的毒 8个人的话, 一次就知道了.
  • 打赏
  • 举报
回复
喝一口,喝一口
sun_li3 2017-06-23
  • 打赏
  • 举报
回复
2的3次方是8
xiaohuh421 2017-06-23
  • 打赏
  • 举报
回复
这个题目应该是最坏情况下, 最少次数吧.
xiaohuh421 2017-06-23
  • 打赏
  • 举报
回复
最少, 不就是一次吗 直接抽到有毒的, 直接over了
赵4老师 2017-06-23
  • 打赏
  • 举报
回复
仅供参考:
真相重于对错 2017-06-23
  • 打赏
  • 举报
回复
引用 6 楼 jiht594 的回复:
[quote=引用 3 楼 hdt 的回复:] [quote=引用 2 楼 jiht594 的回复:] 谁来喝水? 自己一个人的话, 1234混合一起, 有毒的话. 你中毒之后, 再喝毒水就没用了. 你不知道是上次还是这次的毒 8个人的话, 一次就知道了.
程序员的脑子难道会这么死吗? 1、他这个只是要求一个程序。 2、不能拿一个白鼠来做实验? [/quote] 你有没有脑子我不知道, 肯定没有幽默感[/quote] 哦 我来错地方了,以为这里是技术区,原来是水区?
jiht594 2017-06-23
  • 打赏
  • 举报
回复
引用 3 楼 hdt 的回复:
[quote=引用 2 楼 jiht594 的回复:] 谁来喝水? 自己一个人的话, 1234混合一起, 有毒的话. 你中毒之后, 再喝毒水就没用了. 你不知道是上次还是这次的毒 8个人的话, 一次就知道了.
程序员的脑子难道会这么死吗? 1、他这个只是要求一个程序。 2、不能拿一个白鼠来做实验? [/quote] 你有没有脑子我不知道, 肯定没有幽默感
loorygo 2017-06-23
  • 打赏
  • 举报
回复
int[] eight = {0,0,0,1,0,0,0,0};

int iDrinkIt(int[] eight)
{
int n = eight.Length/2;
int[] t = new int[n]{ };
int[] t2 = new int[n]{ };
if(Check(t, n))
{
iDrinkIt(t);
}
else
{
iDrinkIt(t2);
}
}

bool Check(int[] a, int n)
{
if(--n > 0 && a[n] > 0)
return true;
else
Check(a, n);
}
loorygo 2017-06-23
  • 打赏
  • 举报
回复
0010 0000
00 10
10
1
幻夢之葉 2017-06-22
  • 打赏
  • 举报
回复
网上搜索 二分查找算法,你这个代码看起来有些累赘了

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧