之前在某**上看過乙個號稱「98%的人沒解出的德國軟體工程師面試邏輯題」,雖然不知道是真是假,但是今天姑且論論。
//該文章,來自於我的另乙個csdn帳號,此處我對其優化.
題目如下:「一桶16斤的水,還有乙個8斤的空水桶,和乙個3斤的空水桶,問如何平均而精確地分給4個人。」(注意那4個人是可以攜帶任意水的,博主求六步內的解法,但是其他人給了很多解法,但是沒有真正六步內的。)。
我想看完題目,很多人都已經有了乙個普遍的思路,就是分!裝!分!直到分出4個4斤的(其實這就是回答博主所有答案模式)。但是這並不算是程式設計師的開啟方式。而是應該編寫乙個程式能根據n個數字(比如8,3)對某個數字(比如16)進行分解,然後進行拼接(比如4)就可以了。不過,既然知道了程式的解法,那麼也就有了我們的一種思路。也就是首先找出,8,3對16的分解方法,然後再進行拼接。
為了方便表示,我們用array all表示全部的水.用this.array表示此步得到的僅有此步分解的結果陣列
這時我們先進行分解,比如
16-->8=8+8
//表示16斤水用8斤的桶進行分解,得到兩份8斤的水,以下同理
8*2-->3=(5+3)*2
this.array=all=[3,3,5,5]
//表示兩份八斤的水,用3斤的桶進行分解,得到兩份(五斤的水,和三斤的水),...
5*2-->3=(3+2)*2
this.array=[2,2,3,3]
all=[2,2,3,3,3,3]
但是因為我們要得到的是4個4,而此時的數字明顯還不夠進行拼接,並且因為之前都是用3進行分解的,但是要對之後的數字進行分解,明顯需要更小的數字對3進行增加,以減少無法單獨分解的3,而
2+2-->3=3+1
明顯不符合條件,而2位數字的相加再分解,效果看起來也不是很明朗,此時則應當建立3位數字的相加,分解,以此分解多餘的3。不過,其實一開始,我優先考慮的就是
3+3+3-->8=8+1
因為這時可以再得到,乙個8和乙個1,而8可以在進行第一步的分解,這樣可以簡化演算法,而1剛好可以對3進行增加。
3+3+3-->8=8+1
8-->5=5+3-->2+3+3
this.array=[1,2,3,3]
all=[1,2,2,2,3,3,3]
//重複上面的分解步驟
3+3+3-->8=8+1
8-->5=5+3-->2+3+3
this.array=[1,2,3,3]
all=[1,1,2,2,2,2,3,3]
//此時可得result=[4,4,4,4]
//簡化以上步驟,
function ***(...)
return result;
}
這大概就是我對這道問題的終極解法,真是的計算步驟,簡練方便,可移植。而其得出得益於程式設計思想,而程式設計思想又反哺於我們的生活。
「程式設計教給了我另一種思維方式。」——史蒂夫·賈伯斯(《遺失的訪談》)
面試中的邏輯題
e 參 1 day1 給1 段,day2 讓工人把1 段歸還給2 段,day3 給1 段,day4 歸還1 2 段,給4 段。day5 依次類推 2 面對這樣的怪題,有些應聘者絞盡腦汁也無法分成 而有些應聘者卻感到 此題實際很簡單,把切成的8份蛋糕先拿出7份分給7人,剩下的1份連蛋糕盒一起分 給第8...
面試中的一些邏輯題
a.所有商人都是奸商 b.所有商人都不是奸商 c.並非所有商人是奸商 d.並非所有商人不是奸商 e.有的商人不是奸商 首先理解無奸不商 無奸不商乙個漢語詞彙,貶義詞,拼音是w ji n b sh ng,意思是不奸詐就不能作商人,亦可理解為商人都是奸詐的。1 常與無商不奸連用,不奸詐就不能作商人,即商...
網上流傳的微軟面試邏輯題分析
殺父問題 在乙個村莊中 50對夫婦中的每乙個丈夫都曾經不忠於妻子 一旦某個男人與別的女人有染 村子裡的女人 除了這個男人的妻子 因為大家都瞞著她 立刻就知道了 村子很小 村里規定對通姦行為的嚴厲處罰是通姦男人的妻子必須在當天親手殺死自己的丈夫 所有的女人都願意遵守這條法律 問題是 有一天 永無過失 ...