摘要:三個水桶都沒有刻度,現(xiàn)在需要將大水桶中的升水等分成兩份,每份都是升水,附加條件是只能這三個水桶,不能借助其他輔助容器。假設(shè)將每個狀態(tài)下三個水桶中的水的體積作為。
智力題目
有三個容積分別為3升、5升、8升的水桶,其中容積為8升的水桶中裝滿了水,容積為3升和容積為5升的水桶都是空的。三個水桶都沒有刻度,現(xiàn)在需要將大水桶中的8升水等分成兩份,每份都是4升水,附加條件是只能這三個水桶,不能借助其他輔助容器。
“恩,是的,這是一個很經(jīng)典的問題?!?/p>
“然而,我們并不能想全,不信請繼續(xù)往下看。”
答案”廢話不多說,直接看方法吧?!?/p> 第一種(7步)
將8L的水桶中的水,倒?jié)M5L的水桶,這時:8L水桶為3L、5L水桶為5L、3L水桶為0L
將5L的水桶中的水,倒?jié)M3L的水桶,這時:8L水桶為3L、5L水桶為2L、3L水桶為3L
將3L的水桶中的水,倒入8L的水桶,這時:8L水桶為6L、5L水桶為2L、3L水桶為0L
將5L的水桶中的水,倒入3L的水桶,這時:8L水桶為6L、5L水桶為0L、3L水桶為2L
將8L的水桶中的水,倒入5L的水桶,這時:8L水桶為1L、5L水桶為5L、3L水桶為2L
將5L的水桶中的水,倒?jié)M3L的水桶,這時:8L水桶為1L、5L水桶為4L、3L水桶為3L
將3L的水桶中的水,倒入8L的水桶,這時:8L水桶為4L、5L水桶為4L、3L水桶為0L
第二種(8步)將8L的水桶中的水,倒?jié)M3L的水桶,這時:8L水桶為5L、5L水桶為0L、3L水桶為3L
將3L的水桶中的水,倒入5L的水桶,這時:8L水桶為5L、5L水桶為3L、3L水桶為0L
將8L的水桶中的水,倒?jié)M3L的水桶,這時:8L水桶為2L、5L水桶為3L、3L水桶為3L
將3L的水桶中的水,倒?jié)M5L的水桶,這時:8L水桶為2L、5L水桶為5L、3L水桶為1L
將5L的水桶中的水,倒入8L的水桶,這時:8L水桶為7L、5L水桶為0L、3L水桶為1L
將3L的水桶中的水,倒入5L的水桶,這時:8L水桶為7L、5L水桶為1L、3L水桶為0L
將8L的水桶中的水,倒?jié)M3L的水桶,這時:8L水桶為4L、5L水桶為1L、3L水桶為3L
將3L的水桶中的水,倒入5L的水桶,這時:8L水桶為4L、5L水桶為4L、3L水桶為0L
我相信答案肯定不止兩個,到底有多少種答案?
帶著這個疑問,我們來設(shè)計一個算法吧。
問題分析 人的思維解決這個問題的關(guān)鍵是怎么通過倒水湊出確定的1升水或能容納1升水的空間。
例如,當(dāng)8L水桶或5L水桶或3L水桶有1L水時,都能快速倒出4L水。
計算機(jī)思維“窮舉法”
水桶初始狀態(tài):8L水桶裝滿水,3L和5L的水桶為空。
水桶最終狀態(tài):3L水桶為空,5L和8L的水桶各4L水。
假設(shè)將每個狀態(tài)下三個水桶中的水的體積作為status。
從 $status = array(8,0,0) 得到 $status = array(4,4,0)。
當(dāng)然還會有一些限制:
1.各個水桶的都有最大值:
0 <= status[0] <= 8;
0 <= status[1] <= 5;
0 <= status[2] <= 3;
2.當(dāng)前倒水之后各個水桶的狀態(tài),與歷史倒水之后各個水桶的狀態(tài),不能相同。
3.當(dāng)前水桶為空時,不能倒給其他水桶。
4.當(dāng)前水桶為最大容積時,其他水桶不能再向這個水桶倒水。
程序代碼(PHP) 運行結(jié)果一共有 16 種倒水方法,方法如下:
...
(16種方法,貼上去太長了,大家在本地嘗試下,如需要源碼,請關(guān)注公眾號進(jìn)行留言。)
小結(jié)運行代碼之后,一共找到了 16 種倒水的方法,最快的方法需要 7 個步驟。
“怎么樣,是不是沒想到會有這么多方法吧,去考考你身邊的小伙伴吧?!?/p>
本文歡迎轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)請注明作者和出處,謝謝!
推薦閱讀系統(tǒng)的講解 - SSO 單點登錄
系統(tǒng)的講解 - PHP WEB 安全防御
系統(tǒng)的講解 - PHP 緩存技術(shù)
系統(tǒng)的講解 - PHP 接口簽名驗證
系統(tǒng)的講解 - PHP 浮點數(shù)高精度運算
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/31472.html
摘要:問題描述有三個容器分別是三升五升和八升的水桶,其中容積為八升的水桶裝滿了水,其余兩桶為空。水桶沒有刻度,除這三個桶外不能使用其它容器,將升水等分為兩份升的水。 此為《算法的樂趣》讀書筆記,我用javascript重新實現(xiàn)算法。 問題描述 有三個容器分別是三升、五升和八升的水桶,其中容積為八升的水桶裝滿了水,其余兩桶為空。水桶沒有刻度,除這三個桶外不能使用其它容器,將8升水等分為兩份4升...
摘要:本文旨在對鎖相關(guān)源碼本文中的源碼來自使用場景進(jìn)行舉例,為讀者介紹主流鎖的知識點,以及不同的鎖的適用場景。中,關(guān)鍵字和的實現(xiàn)類都是悲觀鎖。自適應(yīng)意味著自旋的時間次數(shù)不再固定,而是由前一次在同一個鎖上的自旋時間及鎖的擁有者的狀態(tài)來決定。 前言 Java提供了種類豐富的鎖,每種鎖因其特性的不同,在適當(dāng)?shù)膱鼍跋履軌蛘宫F(xiàn)出非常高的效率。本文旨在對鎖相關(guān)源碼(本文中的源碼來自JDK 8)、使用場景...
摘要:是如何工作的這是最近我們經(jīng)常被問到的一個問題。是一個控制循環(huán),用于監(jiān)視和縮放部署中的。最早版本僅支持作為可監(jiān)控的度量標(biāo)準(zhǔn)。是版本以上的首選方法。 Kubernetes Autoscaling是如何工作的?這是最近我們經(jīng)常被問到的一個問題。 所以本文將從Kubernetes Autoscaling功能的工作原理以及縮放集群時可以提供的優(yōu)勢等方面進(jìn)行解釋。 什么是Autoscaling 想...
摘要:彼得原理每個組織都是由各種不同的職位等級或階層的排列所組成,每個人都隸屬于其中的某個等級。對一個組織而言,一旦相當(dāng)部分人員被推到其不稱職的級別,就會造成組織的人浮于事,效率低下,導(dǎo)致平庸者出人頭地,發(fā)展停滯。 1、蘑菇管理 蘑菇管理是許多組織對待初出茅廬者的一種管理方法,初學(xué)者被置于陰暗的角落(不受重視的部門,或打雜跑腿的工作),澆上一頭大糞(無端的批評、指責(zé)、代人受過),任其...
摘要:視頻介紹限流算法,分析漏桶算法和令牌算法的應(yīng)用場景,算法原理和算法實現(xiàn)方法視頻在這里分鐘看懂限流算法你好,我是好剛,這一講我們來了解限流算法。這里限流的常用算法有漏桶算法和令牌桶算法。所以令牌桶算法的特點是允許突發(fā)流量。 視頻介紹限流算法,分析漏桶算法和令牌算法的應(yīng)用場景,算法原理和算法實現(xiàn)方法 【視頻在這里】 8分鐘看懂限流算法 你好,我是好剛,這一講我們來了解限流算法 (Rate ...
閱讀 1020·2021-11-15 11:37
閱讀 3828·2021-11-11 16:55
閱讀 3440·2021-11-11 11:01
閱讀 1070·2019-08-30 15:43
閱讀 2830·2019-08-30 14:12
閱讀 822·2019-08-30 12:58
閱讀 3478·2019-08-29 15:19
閱讀 2110·2019-08-29 13:59