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