首页 > 代码库 > 有意思的笔试题记录与分析
有意思的笔试题记录与分析
昨天参加了某公司的笔试,总的来说题目很简单。但是还是有几个个题目是很有意思的,拿来和大家分享下!
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=π r2 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,但是我却不知道问什么!有知道的大神请分享下思想~
未完待续……