邏輯思維面試題
一、假設有一個池塘,里面有無窮多的水。現有2個空水壺,容積分別為5升和6升。問題是如何只用這2個水壺從池塘里取得3升的水。【請描述操作過程】
答:(1)先用容積為6升的水壺裝滿水;
(2)將這些水倒入容積為5升的水壺中,此時容積為6升的水壺中剩下1升水;
(3)將容積為5升的水壺中的水全倒掉,將那一升水倒入容積為5升的水壺中;
(4)再次重復步驟(1)~(3)兩次,即可,最后容積為6升的水壺中將會有3升的水。
二、周雯的媽媽是豫林水泥廠的化驗員。一天,周雯來到化驗室做作業。做完后想出去玩。“等等,媽媽還要考你一個題目,”她接着說,“你看這6只做化驗用的玻璃杯,前面3只盛滿了水,后面3只是空的。你能只移動1只玻璃杯,就使盛滿水的杯子和空杯子間隔起來嗎?”愛動腦筋的周雯,是學校里有名的“小機靈”,她只想了一會兒就做到了。【只能移動以一個玻璃杯,請描述你該怎么做】
答:(1)以從左向右數的方向給每一個玻璃杯編號,分別為1~6號;
(2)將第二只玻璃杯拿起,將里面的水倒入第五只玻璃杯中;
(3)倒完后將第二只玻璃杯再放回原位即可。
三、一個人花8塊錢買了一只雞,9塊錢賣掉了,然后他覺得不划算,花10塊錢又買回來了,11塊賣給另外一個人。問他賺了多少?
答:(答案一:2元)
1. 將花的錢和買的錢分別加起來;
2.用買的錢的總額減去花的錢的總額,即可得到最后賺的錢——2元。
(答案二:1元)
1.第一次交易:8元買到,9元賣掉,賺了一元;
2.第二次交易:10元買到,相比於前面9元賣掉,此時又虧了1元,即此時不虧不賺;
3.最后11元賣掉,相比於10元買到,盈利1元,故最后賺了1元。
四、有口井7米深,有個蝸牛從井底往上爬,白天爬3米,晚上往下墜2米,問蝸牛幾天能從井里爬出來?
答: 5天
(1)第一天:上升了1米;
(2)第二天:上升了2米;
(3)第三天:上升了3米;
(4)第四天:上升了4米;
(5)第五天:在上升了4米的基礎上,白天向上爬3米,此時總共上升了7米,井深也為7米,那么此時蝸牛已經可以爬出井口了。
五、今有2匹馬、3頭牛和4只羊,它們各自的總價都不滿10000文錢(古時的貨幣單位)。如果2匹馬加上1頭牛,或者3頭牛加上1只羊,或者4只羊加上1匹馬,那么它們各自的總價都正好是10000文錢了。問:馬、牛、羊的單價各是多少文錢?【寫出解題過程,以及結果】
答: 馬、牛、羊的單價各是3600、2800、1600文錢
設馬、牛、羊的價格分別為x、y、z,單位:文
列方程:
2x+y=10000,
3y+z=10000,
4z+x=10000
然后解方程即可求出:
x=3600,y=2800,z=1600
六、陳奕迅有首歌叫十年,呂珊有首歌叫365夜,那現在問,十年可能有多少天?【寫出可能的結果】
答:因為這10年中有閏年或平年,故結果為:3651、3652、3653天
七、括號中的數字應該選擇多少:0,4,18,(A),100
A.48;B.58;C.50;D.38
答:選A
規律:
0=0*12,4=1*22,18=2*32,46=3*43,100=4*55
八、有這樣一個數列 1, 1, 2, 3, 5, 8, 13, 21, 34,………求出第30位的值;最好由遞推公式【有編程基礎的同學,可以用你擅長的語言進行編寫】
答:C#代碼如下

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 namespace ConsoleTest 6 { 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 OutPut4(); 12 } 13 //方法1,使用for循環 14 public static void OutPut2() 15 { 16 int num = 1; 17 int prev = 0; 18 for (int i = 0; i < 30; i++) 19 { 20 Console.WriteLine(num.ToString());//輸出到頁面上 21 int temp = num; 22 num += prev; 23 prev = temp; 24 } 25 Console.Read(); 26 } 27 //方法2,使用while循環 28 public static void OutPut1() 29 { 30 int sum = 0; //輸出值 31 int num1 = 0; 32 int num0 = 0; 33 int i = 0;//計數器 34 while (i < 30) 35 { 36 if (i == 0) 37 { 38 sum = num0 = 1; 39 } 40 else if (i == 1) 41 { 42 sum = num1 = 1; 43 } 44 else 45 { 46 sum = num1 + num0; 47 num0 = num1; 48 num1 = sum; 49 } 50 Console.WriteLine(sum); 51 i++; 52 } 53 Console.Read(); 54 } 55 //方法3,使用遞歸循環 56 public static void OutPut4() 57 { 58 for (int i = 0; i < 30; i++) 59 { 60 Console.WriteLine(Calc(i)); 61 } 62 Console.Read(); 63 } 64 public static int Calc(int num) 65 { 66 if (num == 0 || num == 1) 67 { 68 return 1; 69 } 70 return Calc(num - 1) + Calc(num - 2); 71 } 72 } 73 } 74 //方法4,使用數組 75 public static void OutPut3() 76 { 77 var numArray = new int[30]; 78 int i = 0; 79 while (i < 10) 80 { 81 if (i == 0) 82 { 83 numArray[i] = 1; 84 } 85 else if (i == 1) 86 { 87 numArray[i] = 1; 88 } 89 else 90 { 91 numArray[i] = numArray[i - 1] + numArray[i - 2]; 92 } 93 Console.WriteLine(numArray[i]); 94 i++; 95 } 96 Console.Read(); 97 }
九、求以下表達式的值:1-2+3-4+5-6+7-8……+m;說明,寫出遞推公式;【有編程基礎的同學,可以用你擅長的語言進行編寫】。
答:C#代碼如下
1 int sum = 0; 2 for (int i = 1; i <= 5; i++) 3 { 4 if (i%2!=0) 5 { 6 sum += i; 7 } 8 else 9 { 10 sum -= i; 11 } 12 13 } 14 Console.WriteLine(sum); 15 Console.ReadKey();
十、燒一根不均勻的繩子要用一個小時,如何用它來判斷半個小時?燒一根不均勻的繩子,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩子的方法來計時一個小時十五分鍾呢?
【微軟的筆試題,請注意是兩個問題,注意繩子粗細不均勻】
答:(1)取三根繩子;
(2)先將第一根繩子的兩端都點燃;
(3)點燃第一根繩子的同時,將第二根繩子的一端也點燃;
(4)等到第一根繩燒完的同時 (此時已過30分鍾),將第二根繩子的另一端也點燃;
(5)等到第二根繩子燒完的同時(此時又過了15分鍾),將第三根繩子的兩端同時點燃;
(6)等到第三根繩子燒完的時(此時又過了30分鍾),累加起來一共用了1個小時15分鍾。
注:未完,待續!