下面的题目来自滴滴出行2017秋招题。这些题目是我自己觉得比较难或者比较容易出错的题目。
下面就是题目了,开始头脑风暴吧~~~
问题
question one
桌上有12个黑球和1个白球围成一个圆,按一个方向顺序数到13就拿走对应的一个球,如果要求最后拿走的是白球,请问该从哪个求开始数数
question two
黄球和绿球各70个,放到2个空间足够大的盒子中。使用某种放置方法,使得随机取一个盒子,并从中随机取一个球时,得到黄球的概率最大,请问这时取得黄球的概率是多少?
question three
假如技术团队共有50人,其中会C语言的有36人,会JAVA语言的有44人,会GO语言的有32人,同时会这3种语言的至少有多少人?
question four
一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬回家里。
question five
52张牌,四张A,随机打乱后问,从左到右一张一张翻直到出现第一张A,请问平均要翻几张牌?
question six
一个不透明的箱子里共有红,黄,蓝,绿,白五种颜色的小球,每种颜色的小球大小相同,质量相等,数量充足。每个人从篮子里抽出两个小球, 请问至少需要多少个人抽球,才能保证有两个人抽到的小球颜色相同?
答案
question one
约瑟夫环递推公式:f(n, m) = (f(n - 1, m) + m) % n;(其中n是球的数量,m是报的数字)
f(1, 13) = 0;(当只有一个球的时候,最后拿走的球的下标为0)
f(2, 13) = (f(1, 13) + 13) % 2 = 1;(当有2个球的时候,最后拿走的球的下标为1)
f(3, 13) = (f(2, 13) + 13) % 3 = 2;(当有3个球的时候,最后拿走的球的下标为2)
...
f(13, 13) = (f(12, 13) + 13) % 13 = 7;(当有13个球的时候,最后拿走的球的下标为7)
需要注意的是,编号是从0开始的,f(13, 13) = 7,说明最后拿走的球是从最开始的球(编号为0)后面的第7个球;
也就是当顺时针方向白球后第6个黑球,逆时针方向白球后第6个黑球。(建议大家画图看一下,不然不容易弄懂,我在纸上画了好多遍画的还不是很满意,感觉自己画的很丑,所以就不贴在这里了)。
相关代码:
public class Test {
public static void main(String[] args) {
int x = Test.yuesefu(13, 13);
System.out.println(x);
}
static int yuesefu(int n, int m) {
if (n == 1) {
return 0; // 这里返回下标,从0开始,只有一个元素就是剩余的元素0
} else {
return (yuesefu(n - 1, m) + m) % n; // 我们传入的n是总共多少个数
}
}
}
question two
一个黄球放在一个盒子里另外所有都放在另一个盒子里这样就会使得到黄球的概率最大:
1/2+(1/2)*(69/139)
question three
完全不会C语言的有14人,完全不会JAVA6人,完全不会GO18人,50-14-6-18=12
question four
需要找到一个点,当小猴子拿香蕉时能拿最多的香蕉(<=50),这样它可以一次到家,不用再往返。
设Y为要求的香蕉最大剩余数,X为要求的那个点(X米),可以列出方程组:
- Y=(100-3X) - (50-X)
- (100-3X)<=50
很容易求出Y=16
question five
考虑4张A在牌中的位置,他们把其他牌分成了5份(四个点把直线分成五段),完全随机的情况下,每份的平均长度为48/5=9.6,摸完这9.6张后,接下来的就是第一张A,
故平均需要摸9.6+1=10.6张,即11张。
question six
这个题相当于变相的球5种不同颜色的球,两两组合,会有多少种组合。
两个球颜色不一样:C5中取2=10
两个球的颜色相同: C5中取1=5
因而有15种颜色组合。那么有16人的时候必然会有重复的!
掘金沸点——年中总结(如果觉得我的文章不错的话,可以帮我的这个沸点点个赞吗???在此感激不尽了。):https://juejin.im/pin/5b38cba4e51d452bd7b56e04
如果你觉得我的文章对你有帮助话,欢迎关注我的微信公众号:"Java面试通关手册"(一个有温度的微信公众号,无广告,单纯技术分享,期待与你共同进步~~~坚持原创,分享美文,分享各种Java学习资源。)