日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

458. 可怜的小猪

發(fā)布時間:2023/11/29 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 458. 可怜的小猪 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

458. 可憐的小豬

有 buckets 桶液體,其中 正好 有一桶含有毒藥,其余裝的都是水。它們從外觀看起來都一樣。為了弄清楚哪只水桶含有毒藥,你可以喂一些豬喝,通過觀察豬是否會死進行判斷。不幸的是,你只有?minutesToTest 分鐘時間來確定哪桶液體是有毒的。

喂豬的規(guī)則如下:

  • 選擇若干活豬進行喂養(yǎng)
  • 可以允許小豬同時飲用任意數(shù)量的桶中的水,并且該過程不需要時間。
  • 小豬喝完水后,必須有 minutesToDie 分鐘的冷卻時間。在這段時間里,你只能觀察,而不允許繼續(xù)喂豬。
  • 過了 minutesToDie 分鐘后,所有喝到毒藥的豬都會死去,其他所有豬都會活下來。
  • 重復(fù)這一過程,直到時間用完。
    給你桶的數(shù)目 buckets ,minutesToDie 和 minutesToTest ,返回在規(guī)定時間內(nèi)判斷哪個桶有毒所需的 最小 豬數(shù)。
  • 示例 1:輸入:buckets = 1000, minutesToDie = 15, minutesToTest = 60 輸出:5示例 2:輸入:buckets = 4, minutesToDie = 15, minutesToTest = 15 輸出:2示例 3:輸入:buckets = 4, minutesToDie = 15, minutesToTest = 30 輸出:2

    提示:

    • 1 <= buckets <= 1000
    • 1 <=?minutesToDie <=?minutesToTest <= 100

    解題思路

    • 老鼠試毒藥的變種題目
      1024瓶毒藥,10只老鼠,試出一瓶有毒的毒藥,方案:給每瓶藥從0-1023進行編號,老鼠從0-9進行編號,對于每一瓶藥,根據(jù)其編號二進制表示中1出現(xiàn)的位置,給對應(yīng)位置的小白鼠喂藥,根據(jù)小白鼠的死亡結(jié)果,可以反推出毒藥的二進制表示。

    共通點:小白鼠只有兩種狀態(tài)0代表存活,1代表死亡,而本題中可以進行minutesToTest / minutesToDie輪,假如minutesToTest / minutesToDie=2的話,那么可以進行兩輪,存在3種狀態(tài)

  • 第一輪死亡
  • 第二輪死亡
  • 第二輪還存活
  • 老鼠試藥的計算公式為 210=10242^{10}=1024210=1024

    • 1024 為毒藥數(shù)量
    • 2為老鼠可能的狀態(tài)數(shù)量
    • 10 代表老鼠個數(shù)

    因此這題 計算公式為statesres=bucketsstates^{res}=bucketsstatesres=buckets

    • buckets 為毒藥數(shù)量
    • states為小豬可能的狀態(tài)數(shù)量,公式為minutesToTest / minutesToDie + 1;
    • res為需要的小豬數(shù)量,也是我們需要計算的最終結(jié)果

    代碼

    class Solution { public:int poorPigs(int buckets, int minutesToDie, int minutesToTest) {int states = minutesToTest / minutesToDie + 1;return ceil(log(buckets)/log(states));} };

    總結(jié)

    以上是生活随笔為你收集整理的458. 可怜的小猪的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。