上次我在星網銳捷筆試中,有道題目是這樣的
在乙個part中有準備了1000瓶酒,但其中有一瓶是毒酒,要求用最少的囚犯測出毒酒
毒酒發作時間略短於part開始的時間,發作後囚犯會死。(這裡暗示每個囚犯只能喝一次酒,但可以喝多瓶)
當時我沒有想出來,因為當時我糾纏於乙個不是試卷上的演算法浪費了很多時間所以沒有仔細去想,後來聽其他有去的人講起
我才認真做了一下。
對於這道題我得出的答案是10個囚犯。
我是這樣想的如果把10個囚犯看成二進位制的話就有2的10次方也就
是1024種組合
這個數剛好大於1000,問題是囚犯喝酒的分配。
我將10個囚犯按1至10編號,將1000瓶酒按1至1000編號
, 通過對少量資料的分析我得到乙個規律:
囚犯1喝1,3,,999
囚犯2喝2,3,,,6,7,,,998,999
囚犯3喝4,5,6,7,,,12,13,14,15,,
,996,997,998,999
囚犯m喝以2的m-1次方為開始連續2的m-1次方個數
,接著是以2的m次方為公差的
等差排列並且連續2的m-1次方個數
下面的的**計算出每個囚犯需要喝哪些酒
#include
#include
int main()
if(t>1000)break;
}getchar();
}fclose(fp);
while(1)
while(getchar()!='/n');
for(j=0;jans +=pow(2,prison[j]-1);
printf("得出有毒的酒是第%d瓶/n/n",ans);
}return 0;
}
數學問題 1000瓶酒找1毒酒
題目 某酒主人要宴請客人,他共有1000瓶酒,其中1瓶有毒。一旦喝了毒酒後,會在一周後發作,現在如果我們用試紙進行檢測,滴了毒酒 的試紙會在1週後變色,問最少需要多少張試紙可以檢測出哪瓶有毒?解答 10張試紙即可。10張試紙按從左到右的順序一字排好,每瓶酒也編上號1到1000,並把編號轉換成10位二...
數學問題 1000瓶酒找1毒酒
某酒主人要宴請客人,他共有1000瓶酒,其中1瓶有毒。一旦喝了毒酒後,會在一周後發作,現在如果我們用試紙進行檢測,滴了毒酒 的試紙會在1週後變色,問最少需要多少張試紙可以檢測出哪瓶有毒?解答 10張試紙即可。10張試紙按從左到右的順序一字排好,每瓶酒也編上號1到1000,並把編號轉換成10位二進位制...
使用並行二分法解決1000瓶酒找毒酒問題
從1000瓶酒中找出1瓶毒酒是一道著名的面試題,原題如下 某酒主人要宴請客人,他共有1000瓶酒,其中1瓶有毒。一旦喝了毒酒後,會在一天後發作,現在如果我們用小白鼠進行檢測,問一天內最少需要多少只小白鼠才可以檢測出哪瓶有毒?此題的常規思路是10只老鼠按從左到右的順序一字排好,每桶酒也編上號1到100...