2018秋招做题记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rebornyp/article/details/81669671

喝可乐问题

拼多多的一道题,A,B,C,D四小伙排队在买可乐,A买完继续到队尾排队,并且此时一个A变成两个A(双重影分身术?),求问第n个人买可乐时,是4个人里的哪一个?

  • 解题思路
    很容易就想到队列,但是抱歉,超时。这时候你不得不感慨,什么时候有点数学分析能力压身会是一件多么幸运的事情,可惜当时并没有来得及思考。现在来分析的话,反相思考,不关注于队首,而假设这个队无限长,里面一开始就是这样排列的:
    ABCDAABBCCDDAAAABBBBCCCCDDDD…….
    那这个时候问你第n个位置是谁,是不是更好分析些?
    没错,然后划分区间,其实整个队伍可看成:第1个长为4(每个元素出现2^0次)的小队列 ,第二个长为8(每个元素出现2^1次)的小队列,第三个长为16(每个元素出现2^2次)的小队列,一直下去,那么第k(k=1,2…)个小队列,长为4x2^(k-1),每个元素出现2^(k-1)次;好了,现在我们可以肯定,第n个元素肯定是在第k个区间里,而它左边共有k-1个这样的区间,总共含有元素个数是:4x1 + 4x2 + 4x2^(k-1) = 4x(2^k - 1);而加上第n个元素所在的第k个区间队列总共有4x(2^(k+1) - 1)个元素,求出k值,然后计算前面所有k-1个区间的总元素和,n个元素减去该和,然后除以该区间内每个元素的个数,得到的就是序列值;

  • 实现代码

/**
 * 计算第n个喝可乐的是谁?
 * @param n 输出
 * @return 返回 1 - 4 里的某一个数
 */
 static int getIndex(int n) {
     int k = (int) (Math.log((n-1) / 4 + 1) / Math.log(2)) + 1;
     int num = (int) ((Math.pow(2, k - 1) - 1) * 4);
     int index = (n-1 - num) / (int) (Math.pow(2, k - 1)) + 1;
     return index;
 }

红眼睛和蓝眼睛

摘自虎扑步行街某jr的帖子

今天看到街上逻辑题挺多的,然后之前街上也有过红蓝眼逻辑题,不过找不到了,不知道是不是被删除
不管了那就我来吧
决定转一个我很喜欢的红眼睛蓝眼睛题来给大家看看
一个岛上有100个人,其中有5个红眼睛,95个蓝眼睛。这个岛有三个奇怪的宗教规则。
1.他们不能照镜子,不能看自己眼睛的颜色。
2.他们不能告诉别人对方的眼睛是什么颜色。
3.一旦有人知道了自己是红眼睛,他就必须在当天夜里自杀。
某天,有个旅行者到了这个岛上。由于不知道这里的规矩,所以他在和全岛人一起狂欢的时候,不留神就说了一句话:【你们这里有红眼睛的人。】
问题:假设这个岛上的人足够聪明,每个人都可以做出缜密的逻辑推理,请问岛上会发生什么?

  • 解题思路

游客没有输入任何新的信息」这个断言是错的。
N=1的情形不必说了,显然输入了新信息。
对于N>1的情形,要注意,游客必须是当着所有人的面公开做出宣告,如果他是私下分别对每个人说的,就不会起任何作用。「公开宣告」这一举动的意义不是让每个人都知道「岛上有红眼睛」,而是让每个人都知道「每个人都知道每个人都知道……每个人都知道岛上有红眼睛」。在游客公开宣告之前,岛上的人是不可能具有这个多阶知识的,这就是游客输入的新信息。
以N=2为例,公开宣告之后,红1立刻获得了一个新的2阶知识:「红2知道岛上有红眼睛」,在公开宣告之前,他没有能力判断这个2阶命题的真假,因为在这之前命题的真假依赖于红1自己的眼睛颜色。同样,红2也获得了新知识「红1知道岛上有红眼睛」。
N=3时,公开宣告使得红1立刻获得了一个新的3阶知识:「红2知道红3知道岛上有红眼睛」,在此之前,这个3阶命题的真假也是依赖于红1自己的眼睛颜色(红则为真,蓝则为假)。同样,红2和红3也获得了类似的知识。
N=4,5,6,…依此类推。
简单说,「岛上有红眼睛」这件事本来只是一项「共有知识」,公开宣告使它变成了一项「公共知识」。这两种知识的区分在认知逻辑里面非常重要,在博弈论中有广泛的应用。


真话和假话

晚上睡不着,想一些有意思的逻辑题,少年时代看包拯3时的对辽使机智问答再一次浮现在眼前,当时一直不能理解,现在趁着秋招学习的劲儿,稍微想了下居然发现原来是这样。

两个使者都带来了一个盒子,一人手里拿着战书,一人拿着和书,其中一人必须说真话一人必须说假话,而你只能问其中一个人一个问题,对方的回答只能是“是”或“不是”,试想,大宋要求和,该怎么提问?

当时电视里给的包拯的回答是:包拯提问其中任意一个使者A:
——假如我问使者B手里的是战书么?他会怎么回答?
基于此,不管A怎么回答,都可以锁定最后的答案:当然这个得是基于A和B的知识互通,都了解对方说的是真假话,并且思维逻辑都没问题;

  • 试想如果A说真话,并且回答:是,由于A是清楚B说的是假话,那么A说的是其实是符合B说的语境,就是说B说的是假的,说以B手里的是和书;
  • 如果A说的是假话,并且回答:是,由于A是清楚B说的是真话,那么A就会故意说B的反话,只有当B说不是时,A才会说是,所以可以推出B说的是不是,那么B手里拿的就是和书;

其他的回答都可以类似这样去推出答案。


三姬分金问题(海盗博弈)

参考了知乎某答主的回答
三个人是绝对聪明并且理智的。理智指,在利益最大时,能不杀人就不杀人。
三人都是理性人,都想在保全自身性命的情况下获得更多的金币
1、丙想获得最多的钱就只要否决了甲和乙的分配方法就行了。
2、乙知道,如果甲分配的方案被否决,那么在之后两人博弈中,方案认同不能超过半数就会被处死。所以乙应该支持甲的所有决策。
3、甲知道乙一定会支持自己的决定,所以甲会将自己的利益最大化。

因此甲可以选择(100,0,0)的分法;也可以是(99,1,0)的分法,这样用1枚金币笼络乙的人心,体现动漫里的“仁”的思想。

还有类似的海盗分金问题


三门问题

还是BXJ的JR的一个回答,一下子解除了我许久的疑惑~~


猜你喜欢

转载自blog.csdn.net/rebornyp/article/details/81669671