论坛首页 Java企业应用论坛

腾讯BT的面试题

浏览 50843 次
精华帖 (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题。



0 请登录后投票
   发表时间:2009-12-03  
网上搜到一个奇怪问题。
我在房里抛硬币,一不小心,抛了100次正面。然后你进来了。
这时候我和你打赌下一次是反面。

从我的角度看:下次出现反面的概率高。
从你的角度看:出现正反面概率一样。

那究竟概率是多少呢?
谁能解释这个问题??
0 请登录后投票
   发表时间:2009-12-03  
case0079 写道
网上搜到一个奇怪问题。
我在房里抛硬币,一不小心,抛了100次正面。然后你进来了。
这时候我和你打赌下一次是反面。

从我的角度看:下次出现反面的概率高。
从你的角度看:出现正反面概率一样。

那究竟概率是多少呢?
谁能解释这个问题??

正面的概率、甚至可能是百分百。因为按正常情况下不可能出现100次都正面这样的概率只有1/2^100。
既然事实是这样很显然这个硬币已经被做过手脚了,那个规律已经不使用了
0 请登录后投票
   发表时间:2009-12-03  
case0079 写道
网上搜到一个奇怪问题。
我在房里抛硬币,一不小心,抛了100次正面。然后你进来了。
这时候我和你打赌下一次是反面。

从我的角度看:下次出现反面的概率高。
从你的角度看:出现正反面概率一样。

那究竟概率是多少呢?
谁能解释这个问题??

概率还是50%

每次出现正反面得概率是独立的,前几次木有关系
0 请登录后投票
   发表时间:2009-12-03  
iaimstar 写道
case0079 写道
网上搜到一个奇怪问题。
我在房里抛硬币,一不小心,抛了100次正面。然后你进来了。
这时候我和你打赌下一次是反面。

从我的角度看:下次出现反面的概率高。
从你的角度看:出现正反面概率一样。

那究竟概率是多少呢?
谁能解释这个问题??

概率还是50%

每次出现正反面得概率是独立的,前几次木有关系

网游强化装备全是垫装备的,我只能无奈...
0 请登录后投票
   发表时间:2009-12-03  
写道

 

Lxh 写道
其实我的结果没有错误,你这个概率模拟有问题,原因是你的随机数组不是从可能的放置空间中均匀获取的。你使用洗牌算法来得到randomDiamonds数组就可以模拟出结果。

 是我的随机算法的问题。

0 请登录后投票
   发表时间:2009-12-04  
1.节省材料
2.方便运输
3.方便安装
4.美观
5.受力均匀

另一答案噢:

“井盖为什么是圆的?”

---以下是理查德·范曼在微软面试时回答这个问题的情况。

面试官:现在我们要问一个问题,看看你的创造性思维能力。不要想得太多,运用日常生活中的常识,描述一下你的想法。这个问题是,下水道的井盖为什么是圆的?
范曼:它们并不都是圆的,有些是方的,的确有些圆井盖,但我也看过方的,长方的。
面试官:不过我们只考虑圆形的井盖,他们为什么是圆的?
范曼:如果我们只考虑圆的,那么它们自然是圆的。
面试官:我的意思是,为什么会存在圆的井盖?把井盖设计成圆形的有什么特殊的意义吗?
范曼:是有特殊意义,当需要覆盖的洞是圆形时,通常盖子也是圆的。用一个圆形的盖子盖一个圆形的洞,这是最简单的办法。
面试官:你能想到一个圆形的井盖比方形的井盖有哪些优点吗?
范曼:在回答这个问题之前,我们先看看盖子下面是什么。盖子下面的洞是圆的,因为圆柱形最能承受周围土地的压力。而且,下水道出孔要留出足够一个人通过的空间,而一个顺着梯子爬下去的人的横截面基本是圆的,所以圆形自然而然地成为下水道出入孔的形状。圆形的井盖只是为了覆盖圆形的洞口。
面试官:你认为存在安全方面的考虑吗?我的意思是,方形的井盖会不会掉进去,因此造成人身伤害?
范曼:不大可能。有时在一些方形洞口上也会看到方形的盖子。这种盖子比入口大,周围有横挡,通常这种盖子是金属质地,非常重。我们可以想象一下,两英尺宽的方形洞口,1到1.5英寸宽的横挡。为了让井盖掉进去,需要抬起一端,然后旋转30度,这样它就不受横挡的妨碍了,然后再将井盖与地平线成45度角,这时转移的重心才足以让井盖掉下去。是的,方形的井盖的确存在掉下去的可能,但可能性很小,只要对负责开井盖的人稍加培训,他就不会犯这样的错误。从工程学来看,井盖的形状完全取决于它要覆盖的洞口的形状。
面试官:(面有难色)我要与管理层谈点事情。(离开了房间) 10分钟后,面试官回来了。
面试官:我们推荐你立刻去推销部工作。
0 请登录后投票
   发表时间:2009-12-04  
JustDoNow 写道
那为什么漏雨水的盖子不做成圆的而是长方的呢

如果给我这个设计要求,我也会选择方的。
依据是:它要安放在路边,让它在那一段的雨水尽量都进去。
就考虑,希望贴边的一侧足够长,而不是一点点。
圆盖被否定。
三角盖子也没什么不可以,但一般来说大家不喜欢三角的。
于是最简单的选择就是长方的。至于长宽比需要实验(经验也是来自实验)确定。
0 请登录后投票
   发表时间:2009-12-04  
很期待看到这些题目的答案
好像挺难找规律的。
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics