锁定老帖子 主题:腾讯BT的面试题
精华帖 (0) :: 良好帖 (7) :: 新手帖 (1) :: 隐藏帖 (4)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-03
cralcui 写道 Lxh的思路应该是对的,不过概率可能有点问题,m层之后各层出去的概率应该不是相同的。
我写了下代码模拟了一下 import java.util.Random; public class JustForTest { // 随机数的最大值 private static int MAX_RANDOM_VALUE = 5 * 7 * 8 * 9; // 钻石的个数 private static int DIAMOND_COUNT = 10; private static Random RANDOM = new Random(); public static void main(String[] args) { // 循环的次数 int count = 1000000; // i表示到第几层后才去取 for (int i = -1; i < DIAMOND_COUNT - 1; i++) { // 得到最大的次数 int trueGet = 0; for (int j = 0; j < count; j++) { int[] randomDiamonds = generateRandomNumbers(); int index = getMaxNumber(randomDiamonds, i); // 如果是最大的,则取到了 if (randomDiamonds[index] == DIAMOND_COUNT - 1) { trueGet++; } } // 计算得到最大的比例 float percent = (float) trueGet / count; System.out.println("m=" + (i + 1) + ", p=" + percent); } } // 生成0到9的随机字符窜数组 private static int[] generateRandomNumbers() { boolean[] hasUsed = new boolean[DIAMOND_COUNT]; int[] randomNumbers = new int[DIAMOND_COUNT]; for (int i = 0; i < DIAMOND_COUNT; i++) { // 得到随机钻石的大小 int size = RANDOM.nextInt(MAX_RANDOM_VALUE) % DIAMOND_COUNT; while (hasUsed[size]) { size = (size + 1) % DIAMOND_COUNT; } randomNumbers[i] = size; hasUsed[size] = true; } return randomNumbers; } private static int getMaxNumber(int[] numbers, int m) { int maxSize = -1; // 取m层中最大的 for (int i = 0; i <= m; i++) { if (numbers[i] > maxSize) { maxSize = numbers[i]; } } // 从m+1层开始取比maxSize还大的 for (int i = m + 1; i < numbers.length; i++) { // 如果比maxSize还大,则出电梯 if (numbers[i] > maxSize) { return i; } } // 如果没有取到,则取最后一个 return numbers.length - 1; } } 最后输出的结果是: m=0, p=0.100024(这个相当于直接从1楼出来) m=1, p=0.234854 m=2, p=0.289502 m=3, p=0.307835 m=4, p=0.302407 m=5, p=0.282525 m=6, p=0.249452 m=7, p=0.206941 m=8, p=0.156819 m=9, p=0.100326(这个相当于直接从10楼出来) 有个疑问,这个策略是怎么想到的啊? (我是想不出来的) 其实我的结果没有错误,你这个概率模拟有问题,原因是你的随机数组不是从可能的放置空间中 均匀获取的。你使用洗牌算法来得到randomDiamonds数组就可以模拟出结果。 当然这也说明了采用的策略的成功概率是一种先验概率,有时候把放置方式也考虑进去, 那就把概率题变成了iq题。 |
|
返回顶楼 | |
发表时间:2009-12-03
网上搜到一个奇怪问题。
我在房里抛硬币,一不小心,抛了100次正面。然后你进来了。 这时候我和你打赌下一次是反面。 从我的角度看:下次出现反面的概率高。 从你的角度看:出现正反面概率一样。 那究竟概率是多少呢? 谁能解释这个问题?? |
|
返回顶楼 | |
发表时间:2009-12-03
case0079 写道 网上搜到一个奇怪问题。
我在房里抛硬币,一不小心,抛了100次正面。然后你进来了。 这时候我和你打赌下一次是反面。 从我的角度看:下次出现反面的概率高。 从你的角度看:出现正反面概率一样。 那究竟概率是多少呢? 谁能解释这个问题?? 正面的概率、甚至可能是百分百。因为按正常情况下不可能出现100次都正面这样的概率只有1/2^100。 既然事实是这样很显然这个硬币已经被做过手脚了,那个规律已经不使用了 |
|
返回顶楼 | |
发表时间:2009-12-03
case0079 写道 网上搜到一个奇怪问题。
我在房里抛硬币,一不小心,抛了100次正面。然后你进来了。 这时候我和你打赌下一次是反面。 从我的角度看:下次出现反面的概率高。 从你的角度看:出现正反面概率一样。 那究竟概率是多少呢? 谁能解释这个问题?? 概率还是50% 每次出现正反面得概率是独立的,前几次木有关系 |
|
返回顶楼 | |
发表时间:2009-12-03
iaimstar 写道 case0079 写道 网上搜到一个奇怪问题。
我在房里抛硬币,一不小心,抛了100次正面。然后你进来了。 这时候我和你打赌下一次是反面。 从我的角度看:下次出现反面的概率高。 从你的角度看:出现正反面概率一样。 那究竟概率是多少呢? 谁能解释这个问题?? 概率还是50% 每次出现正反面得概率是独立的,前几次木有关系 网游强化装备全是垫装备的,我只能无奈... |
|
返回顶楼 | |
发表时间:2009-12-03
写道
Lxh 写道
其实我的结果没有错误,你这个概率模拟有问题,原因是你的随机数组不是从可能的放置空间中均匀获取的。你使用洗牌算法来得到randomDiamonds数组就可以模拟出结果。
是我的随机算法的问题。 |
|
返回顶楼 | |
发表时间:2009-12-04
1.节省材料
2.方便运输 3.方便安装 4.美观 5.受力均匀 另一答案噢: “井盖为什么是圆的?” ---以下是理查德·范曼在微软面试时回答这个问题的情况。 面试官:现在我们要问一个问题,看看你的创造性思维能力。不要想得太多,运用日常生活中的常识,描述一下你的想法。这个问题是,下水道的井盖为什么是圆的? 范曼:它们并不都是圆的,有些是方的,的确有些圆井盖,但我也看过方的,长方的。 面试官:不过我们只考虑圆形的井盖,他们为什么是圆的? 范曼:如果我们只考虑圆的,那么它们自然是圆的。 面试官:我的意思是,为什么会存在圆的井盖?把井盖设计成圆形的有什么特殊的意义吗? 范曼:是有特殊意义,当需要覆盖的洞是圆形时,通常盖子也是圆的。用一个圆形的盖子盖一个圆形的洞,这是最简单的办法。 面试官:你能想到一个圆形的井盖比方形的井盖有哪些优点吗? 范曼:在回答这个问题之前,我们先看看盖子下面是什么。盖子下面的洞是圆的,因为圆柱形最能承受周围土地的压力。而且,下水道出孔要留出足够一个人通过的空间,而一个顺着梯子爬下去的人的横截面基本是圆的,所以圆形自然而然地成为下水道出入孔的形状。圆形的井盖只是为了覆盖圆形的洞口。 面试官:你认为存在安全方面的考虑吗?我的意思是,方形的井盖会不会掉进去,因此造成人身伤害? 范曼:不大可能。有时在一些方形洞口上也会看到方形的盖子。这种盖子比入口大,周围有横挡,通常这种盖子是金属质地,非常重。我们可以想象一下,两英尺宽的方形洞口,1到1.5英寸宽的横挡。为了让井盖掉进去,需要抬起一端,然后旋转30度,这样它就不受横挡的妨碍了,然后再将井盖与地平线成45度角,这时转移的重心才足以让井盖掉下去。是的,方形的井盖的确存在掉下去的可能,但可能性很小,只要对负责开井盖的人稍加培训,他就不会犯这样的错误。从工程学来看,井盖的形状完全取决于它要覆盖的洞口的形状。 面试官:(面有难色)我要与管理层谈点事情。(离开了房间) 10分钟后,面试官回来了。 面试官:我们推荐你立刻去推销部工作。 |
|
返回顶楼 | |
发表时间:2009-12-04
JustDoNow 写道 那为什么漏雨水的盖子不做成圆的而是长方的呢
如果给我这个设计要求,我也会选择方的。 依据是:它要安放在路边,让它在那一段的雨水尽量都进去。 就考虑,希望贴边的一侧足够长,而不是一点点。 圆盖被否定。 三角盖子也没什么不可以,但一般来说大家不喜欢三角的。 于是最简单的选择就是长方的。至于长宽比需要实验(经验也是来自实验)确定。 |
|
返回顶楼 | |
发表时间:2009-12-04
很期待看到这些题目的答案
好像挺难找规律的。 |
|
返回顶楼 | |
发表时间:2009-12-17
最后修改:2009-12-17
iaimstar 写道 井盖为啥是圆的这种题才恶心
我就见过方的井盖。 需要当受到重击后反弹跳起 快速归位....... 麦田的杯具 [8.99153199501342, 3.0428786865132693, 2.321307442112257, 1.0898225679047524, 3.119315329387339, 0.16251916525996557, 4.793993308226544, 3.6939716915537812, 3.768235531160602, 7.1047214966311225] 4.793993308226544>avg:3.9202280824029248 public class 十楼钻石 { public static double a = 0 ; public static int 层数 = 10; public static double max = 0; public static double all = 0; public static void main(String[] args) { List<Double> qq = new ArrayList<Double>(); Random r = new Random(System.currentTimeMillis()); for(int i =0 ; i < 层数 ; i++){ qq.add(r.nextDouble()*10); } System.out.println(qq); for(int i = 0 ; i < 层数 ; i++){ if(findMax(qq.get(i),i)){ break; } } } /** * 普通人 的人生观. * @param d * @param i * @return */ public static boolean findMax(Double d, int i) { all += d; if(i<层数/3){ if(d>max){ max=d; } return false; }else if(i>层数/3&&i<层数*2/3){ if (d >= max){ a=d; System.out.println(d+">max:"+max); return true; } }else{ if(d>=all/i){ a=d; System.out.println(d+">avg:"+(all/i)); return true; } } a=d; return false; } } [7.420518562610379, 1.6921481862057763, 9.299018630675382, 3.890690426177432, 8.497774202785426, 7.514067725547118, 0.4569935448510076, 5.463223147655722, 3.5133864336405187, 1.4695303755976097] last: 1.4695303755976097 最大:9.299018630675382 |
|
返回顶楼 | |