昨天參加了某公司的筆試,總的來說題目很簡單。但是還是有幾個個題目是很有意思的,拿來和大家分享下!
1、小周帶着他的鴕鳥穿越1000公里的沙漠,運送3000顆白菜。已知鴕鳥一次性可駝1000顆白菜,但每走1公里又要吃掉1棵白菜,問:小周最終可以運多少顆白菜?
分析:記得以前算法設計書上有個類似的油車過沙漠的問題,當時這問題是用倒推法來解決的,因為它有個結題突破口:油車以最少的耗油量穿過沙漠。本題同是過沙漠問題,但是卻沒有像油車過沙漠的解題突破口,怎么辦呢?我們先想一個極限:讓小周直接帶着1000顆白菜頭也不回的走到終點,這樣剛好在途中吃完了所有白菜。此時起點還堆着2000棵白菜!所以我們只能折中:也就是每次出發都是帶1000棵白菜,但是還要想着再次開始新的旅程時,最開始的起點是沒有白菜的。具體做法:一共3000顆,所以大致可以將全程分為3個階段。
第一階段:每次只能運1000,所以要從起點出發走3次(一遍運完所有白菜,吃掉的歸吃掉總不至於像上面說的完事之后起點還有2000顆,但是再也回不去了!),減去最后一次出發無需返回的1次也就是第一階段來回5次。那么每一回就吃掉1000/5=200顆,所以第一階段要走200公里。與此同時白菜的余量=3000-200*5=2000;
第二階段:余下2000顆,所以要從第一階段的終點出發走2次,減去最后一次無需返回的1次也就是第二階段來回3次,那么每一回吃掉1000/3=333顆,所以第二階段要走333公里,剩余白菜2000-333*3=1001顆。
第三階段:當然一路奔向成功了!要走的路程1000-200-333=467公里,用第二階段的白菜余量1001-467就是最后到達終點時的白菜余量即為534顆。
多謝園友一蟻行x和DLMUCAI付的提醒,其實到第三階段的時候已經出來答案了,這是個選擇題只是我沒給選項罷了!我又斟酌了一下:在第二階段1000/3我做了粗略處理。應該剩余1000/3顆,剩余白菜1000顆。那么第三階段就是1000-200-1000/3=466.7公里(約等於466公里,每走1公里吃1顆所以不足1公里就舍去),最終:1000-466=534顆。最后提醒大家本文所述均只代表個人觀點,如有錯誤或有更好的解決辦法,歡迎大家拍磚~
2、用一根繩子去測量海溝的深度,發現繩子放到2000米因自身重力斷掉了。若把相同材質的繩子半徑加粗到一杯,能放到多少米?
分析:我們知道m=p*v,既然材質相同則p相同,v=π r² h,h不變時v擴大到原來的4倍。我們再來從微觀看,上邊的拉力之所以能和下邊的拉力達到平衡,是因為繩子傳遞了這個拉力,繩子之所以能傳遞這個拉力是因為其分子之間有引力,當繩子之間分子的引力不足以傳遞這個拉力時,繩子的分子引力被拉力破壞,就像拉開吸引在一起的磁鐵一樣,繩子宏觀表現被拉斷。所以我們只需分析單位橫截面上的拉力即可,雖然繩子加粗會導致繩子的重力變為原來的4倍,但是同時橫截面積液擴大為原來的4倍,多以作用在單位橫截面上的拉力不變。所以還是2000米。
3、這個題目記得不太清晰了,大致是這樣的:小明打算用20元去買花,要充分利用這些錢,那么他必須買那一種花?
A、單價3.8元的 B單價4元的 C單價4.4元的 D單價6元的
這個題目呢我一看覺得如果編程實現的話非常容易!直接4個嵌套循環就ok,代碼如下
1 protected void Button2_Click(object sender, EventArgs e) 2 { 3 List<string> l = new List<string>(); 4 for (int i = 0; i < 5; i++) 5 { 6 for (int j = 0; j < 5; j++) 7 { 8 for (int x = 0; x < 5; x++) 9 { 10 for (int y = 0; y < 5; y++) 11 { 12 if (3.8*i+4*j+4.4*x+6*y==20) 13 { 14 l.Add(i.ToString() + "\t" + j.ToString() + "\t"+x.ToString()+"\t"+y.ToString()); 15 } 16 } 17 } 18 } 19 } 20 ListBox1.DataSource = l; 21 ListBox1.DataBind(); 22 }
執行結果(只有2組滿足,對比可知選B):
問題:如果我們在卷面做的時候要一種情況一種情況地試嗎?當時我做的時候我直接選的能被整除的B,但是我卻不知道問什么!有知道的大神請分享下思想~
未完待續……