逻辑思维面试题
一、假设有一个池塘,里面有无穷多的水。现有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#代码如下
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
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分钟。
注:未完,待续!