由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 发个google的面试题
相关主题
如果给随即函数rand[1,5] 如何产生rand[1,7]interview中被问到没有的做过的东西怎么回答?
请教个弱题:random generator: from 1~5 to 1~7推荐一个random generation的总结
Google面试回来心情坏到极点
G家onsite 随机数一题请教电面试题
G家面经总结,顺便求个bless,和一起找工作的同学们共勉这个题怎么做啊?
问一个面试题facebook intern 面经
微软onsite SDET 面经random numbers
discuss an array rearrange questionc++中rand() 这个函数怎么实现的?
相关话题的讨论汇总
话题: int话题: return话题: 题目话题: rand话题: 概率
进入JobHunting版参与讨论
1 (共1页)
M********5
发帖数: 715
1
刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
准备的还是不够,希望能对其他找工作的人有帮助。
一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
另外两道题
1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
)”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下
2 第二道题,以1/(2^n)的概率返回1,其它的时候返回0,题目应该假设有个函数可以
生成1或者0,以1/2的概率
我当时想了一下,最intuitive的想法是先产生一个数,num = 1< (double)num * rand();
当时写的时候没有把num转化成double,这是一个bug,并且我觉得这个bug其实是不
应该的,也是个很关键的bug。 然后他不满意,我也知道,我说n很大的时候num会
overflow,这个时候有两种解决方式,一种是用BigInt,还有一种用divide and
conque,举了个例子,如果int是16位的话,那么n大于16的时候,就不断地divide and
conque,直到小于16为止。
然后我第二天把这个问题想了一想,我现在来讲,比较好的解决方法是:
int probability(int n){
std::vector vec_n;
int i;
for(i=0; i int t = fun_0_1();
vec_n.push_back(t);
}
if( vec_n[0] == 1 )
for(i=1; i if( vec_n[i]==1 )
break;
}
if( i==n )
return 1;
else
return 0;
}
说实话,题目不难,但是第一题,我真是没看出来他想要什么样的答案,并且最后他要
的这个答案的方向,我觉得很奇怪,其实我最后给他的答案跟他这个意思也很相近了,
但是他觉得这不是他想要的,我也没有办法。
第二题,说实在的,我觉得divide and conquer是可行的,并且这个方法的效率也不差
,但是我觉得最后的code写得还是很不完美的,有两个地方我做的不好,一个是不能假
设int为16位,可以用sizeof函数算出来,第二个我divide and conquer的时候没有考
虑到奇数偶数的问题,这个应该是考虑到的,不然没有办法保证产生的概率是1/(2^n)
不过其实我依然觉得,这个题目不难,但是也不像想象中的那么简单,主要是这些并不
是常见的算法和数据结构的题目,没有碰到的时候,你一下子能不能有最好的思路,这
个很难说。
最后希望大家面g家的人好运了,如果能碰到相同的题目,算是对你有点帮助了。
j******2
发帖数: 362
2
请问这个是店面吗?能透露是什么组吗?

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

M********5
发帖数: 715
3
对,这个是电面,没有什么组吧,general的。。。

【在 j******2 的大作中提到】
: 请问这个是店面吗?能透露是什么组吗?
:
: -1

j*****y
发帖数: 1071
4
bless.
第一题 还用在 计算一个数 有多少个1 bit
第二题这么做可以吗, 那个随机函数 call n 次, 每次都是1 的话 返回 1, 否则返
回 0

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

j******2
发帖数: 362
5
谢谢分享!祝好运!

【在 M********5 的大作中提到】
: 对,这个是电面,没有什么组吧,general的。。。
M********5
发帖数: 715
6
这个,如果说你说出来了每次改变最后一个1,自然就推出可以计算有多少个1了
第二个这么做是对的,不过我当时拿到这个题目的时候有点懵了,其实他没有跟我说他
有一个那样的随机函数,他没有加什么条件,是我最后面完了把这个题目想了想,他应
该是这个意思。应该是你说的这个方法,1/(2^n)就是(1/2)^n嘛。。。没有准备好啊,
要是这个题目onsite我也肯定悲剧。。。

【在 j*****y 的大作中提到】
: bless.
: 第一题 还用在 计算一个数 有多少个1 bit
: 第二题这么做可以吗, 那个随机函数 call n 次, 每次都是1 的话 返回 1, 否则返
: 回 0
:
: -1

d*********g
发帖数: 154
7

感觉这样做应该是最简单的~

【在 j*****y 的大作中提到】
: bless.
: 第一题 还用在 计算一个数 有多少个1 bit
: 第二题这么做可以吗, 那个随机函数 call n 次, 每次都是1 的话 返回 1, 否则返
: 回 0
:
: -1

l**b
发帖数: 457
8
能不能直接生成n个0,1,然后如果全部是0才返回0,只要出现1个1都返回1?这样就不
用担心overflaw了吧?也是比较naive的想法
M********5
发帖数: 715
9
反了,如果全部是0才返回1,只要出现个1就返回0,跟上面的思路是一样的。。。

【在 l**b 的大作中提到】
: 能不能直接生成n个0,1,然后如果全部是0才返回0,只要出现1个1都返回1?这样就不
: 用担心overflaw了吧?也是比较naive的想法

l**b
发帖数: 457
10
丢,老年痴呆,再次看错题目,你没问问如果n小于0的话怎么处理?是不是直接返回1
如果n <= 0?

【在 M********5 的大作中提到】
: 反了,如果全部是0才返回1,只要出现个1就返回0,跟上面的思路是一样的。。。
相关主题
问一个面试题interview中被问到没有的做过的东西怎么回答?
微软onsite SDET 面经推荐一个random generation的总结
discuss an array rearrange question心情坏到极点
进入JobHunting版参与讨论
p*****2
发帖数: 21240
11

这样不错。这个题还有个变形。就是可以按照任意的概率来返回。

【在 l**b 的大作中提到】
: 能不能直接生成n个0,1,然后如果全部是0才返回0,只要出现1个1都返回1?这样就不
: 用担心overflaw了吧?也是比较naive的想法

l**b
发帖数: 457
12
就是不一定按照1/2^n返回1?可以是1/5^3这样?
然后谢谢楼主的MJ和题目,收录了。

【在 p*****2 的大作中提到】
:
: 这样不错。这个题还有个变形。就是可以按照任意的概率来返回。

r*****e
发帖数: 146
13
prob1: it can be used to count how many 1's for a number in binary
representation.
prob2:
int fun(int n){
while(n){
if(rand_0_1()==1){
n--;
}else{
return 0;
}
}
return 1;
}

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

b*********h
发帖数: 103
14
第二题感觉这样做挺好的 只是看实现方式还可以大大提高 这样写 google 应该不喜欢
的...
p*****2
发帖数: 21240
15

嗯。可以在0-1之间任意概率返回

【在 l**b 的大作中提到】
: 就是不一定按照1/2^n返回1?可以是1/5^3这样?
: 然后谢谢楼主的MJ和题目,收录了。

l**b
发帖数: 457
16
第一题followup这样好晕啊,如果没有看过完全不知道吗。
M********5
发帖数: 715
17
我也是这么想的,他这么followup我不知道他要什么东西

【在 l**b 的大作中提到】
: 第一题followup这样好晕啊,如果没有看过完全不知道吗。
m******s
发帖数: 165
18
第一题可以用来遍历一个bitmask的所有1,不过我不太喜欢这么写。。。

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

p*****2
发帖数: 21240
19

我把这道题做了以下,放到了我的博客里了。
http://blog.sina.com.cn/s/blog_b9285de20101h463.html

【在 p*****2 的大作中提到】
:
: 嗯。可以在0-1之间任意概率返回

f********s
发帖数: 35
20
Smart!

【在 p*****2 的大作中提到】
:
: 我把这道题做了以下,放到了我的博客里了。
: http://blog.sina.com.cn/s/blog_b9285de20101h463.html

相关主题
请教电面试题random numbers
这个题怎么做啊?c++中rand() 这个函数怎么实现的?
facebook intern 面经关于2D, 3D平面上点的问题?
进入JobHunting版参与讨论
e******o
发帖数: 757
21
靠,牛逼,面试的时候能想到bayes

【在 p*****2 的大作中提到】
:
: 我把这道题做了以下,放到了我的博客里了。
: http://blog.sina.com.cn/s/blog_b9285de20101h463.html

c*****z
发帖数: 182
22
忍不住说,第二题不酒是第一题的应用吗

【在 e******o 的大作中提到】
: 靠,牛逼,面试的时候能想到bayes
n****r
发帖数: 120
23
“实现一个函数随机返回任意概率的true”这题如下解有啥问题没有?
static boolean tureWithProbablity(double p){
int r = (int)(new Random().nextDouble() * 100);
int prob = (int)(p * 100);
return r < prob;
}
f*******t
发帖数: 49
24
第一个都没看明白,怎么能算出N的1个数呢?
1111 & 1110 = 1110
10100 & 10011 = 10000
p*****2
发帖数: 21240
25

需要个循环吧。

【在 f*******t 的大作中提到】
: 第一个都没看明白,怎么能算出N的1个数呢?
: 1111 & 1110 = 1110
: 10100 & 10011 = 10000

y********9
发帖数: 130
26
第一题在那本卖的最好的c语言书里有讲到。。
d******e
发帖数: 164
27
解释下吧。。。看不懂

【在 p*****2 的大作中提到】
:
: 需要个循环吧。

y********9
发帖数: 130
28

求解释

【在 d******e 的大作中提到】
: 解释下吧。。。看不懂
f*******t
发帖数: 49
29

哪本呢?

【在 y********9 的大作中提到】
: 第一题在那本卖的最好的c语言书里有讲到。。
y********9
发帖数: 130
30

名字忘记了 以前看的 反正就是基本上每个人都买的作为“c语言101”的书

【在 f*******t 的大作中提到】
:
: 哪本呢?

相关主题
Randomly shuffle decks of cards请教个弱题:random generator: from 1~5 to 1~7
how to shuffle a deck of cards?Google面试回来
如果给随即函数rand[1,5] 如何产生rand[1,7]G家onsite 随机数一题
进入JobHunting版参与讨论
A****L
发帖数: 138
31
太牛了! 你是现场写出这个code的吗?
弱问下,如何从数学上,推到出来呢?

【在 p*****2 的大作中提到】
:
: 需要个循环吧。

p*****2
发帖数: 21240
32

博客上加解释了。

【在 y********9 的大作中提到】
:
: 名字忘记了 以前看的 反正就是基本上每个人都买的作为“c语言101”的书

p*****2
发帖数: 21240
33

不是我面的。是某大牛面遇到的。我大概花了40分钟解出来的。我数学不好,在
macbook上java试验证明是可行的。
但是当时有人在linux上效果不好,我研究了一下,是linux上本身的random函数有问题


【在 A****L 的大作中提到】
: 太牛了! 你是现场写出这个code的吗?
: 弱问下,如何从数学上,推到出来呢?

h*u
发帖数: 122
34
MARK
y********9
发帖数: 130
35

懂了 多谢 当场想出来很难啊

【在 p*****2 的大作中提到】
:
: 不是我面的。是某大牛面遇到的。我大概花了40分钟解出来的。我数学不好,在
: macbook上java试验证明是可行的。
: 但是当时有人在linux上效果不好,我研究了一下,是linux上本身的random函数有问题
: 。

e******o
发帖数: 757
36
有个简单的,不是有doulbe 的binary representation么,initialize 一个为0 的
double, 不停的抛硬币,抛到正面就把相应的bit set为1,反面就set为0, 如果得到的
数如果大于p, 输出false, 小于p就输出true.

【在 p*****2 的大作中提到】
:
: 不是我面的。是某大牛面遇到的。我大概花了40分钟解出来的。我数学不好,在
: macbook上java试验证明是可行的。
: 但是当时有人在linux上效果不好,我研究了一下,是linux上本身的random函数有问题
: 。

p*****2
发帖数: 21240
37

嗯。那个大牛是ACMER,所以出的题比一班人要难。

【在 y********9 的大作中提到】
:
: 懂了 多谢 当场想出来很难啊

p*****2
发帖数: 21240
38

有其他人提出这个思路了,当时。不过我也不太懂binary的representation, 这个算法
应该fair吧?

【在 e******o 的大作中提到】
: 有个简单的,不是有doulbe 的binary representation么,initialize 一个为0 的
: double, 不停的抛硬币,抛到正面就把相应的bit set为1,反面就set为0, 如果得到的
: 数如果大于p, 输出false, 小于p就输出true.

e******o
发帖数: 757
39
bool tossCoin();
bool randP(double P)
{
doule p0(0);
for ( int i=1; i!=N; ++i ) \\N根据double的精度,多少不记得了
{
if ( tossCoin() )
p0 += 1/pow(2,i);
if ( p0 > p ) return false;
if ( p - p0 ) > 1/pow(2,i) return true;
}
return false;
}

【在 p*****2 的大作中提到】
:
: 有其他人提出这个思路了,当时。不过我也不太懂binary的representation, 这个算法
: 应该fair吧?

b***y
发帖数: 14281
40
两个都是正解,LZ还在迷雾中,悲剧是正常的。

★ 发自iPhone App: ChineseWeb 7.7

【在 j*****y 的大作中提到】
: bless.
: 第一题 还用在 计算一个数 有多少个1 bit
: 第二题这么做可以吗, 那个随机函数 call n 次, 每次都是1 的话 返回 1, 否则返
: 回 0
:
: -1

相关主题
G家onsite 随机数一题微软onsite SDET 面经
G家面经总结,顺便求个bless,和一起找工作的同学们共勉discuss an array rearrange question
问一个面试题interview中被问到没有的做过的东西怎么回答?
进入JobHunting版参与讨论
M********5
发帖数: 715
41
我说了这两个都是正解,你哪看出我还在迷雾中了。。。

【在 b***y 的大作中提到】
: 两个都是正解,LZ还在迷雾中,悲剧是正常的。
:
: ★ 发自iPhone App: ChineseWeb 7.7

s****g
发帖数: 257
42
This sounds like not as hard. The bar has been lowered?

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

y****n
发帖数: 743
43
我能想到比较快的方法:
const int ShiftStep = 63;
static bool Random2N(int n)
{
Random rand = new Random(DateTime.Now.Millisecond);
while (n > 0)
{
int shift = Math.Min(ShiftStep, n);
double randVal = rand.NextDouble() * ((UInt64)1 << shift);
if (randVal >= 1)
return false;
n -= shift;
}
return true;
}
f*****n
发帖数: 405
44
这个还可以再简单:
Prob2:
int fun(int n) {
while(n--) {
if(rand_0_1()==0) return 0;
}

return 1;
}

【在 r*****e 的大作中提到】
: prob1: it can be used to count how many 1's for a number in binary
: representation.
: prob2:
: int fun(int n){
: while(n){
: if(rand_0_1()==1){
: n--;
: }else{
: return 0;
: }

h*******e
发帖数: 1377
45
n&(n-1)可以用在8 皇后问题里面,枚举下一个取得皇后。

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

l****g
发帖数: 1320
46
希望楼主多分享点信息
m*****k
发帖数: 731
47
如果你都可以生成num = 1< 那干嘛不直接 new Random().nextInt(n) 来产生一个 int x, where n-1>=x>=0,
return x==0 就完了。
我实在是看不出(double)num*rand() 为何能work?

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

e***s
发帖数: 799
48
第二题最简单就是这样吧? 不知道有BUG没有
int func(int n){
for(int i = 1; i <= n; i++)
{
if(Rand() == 0)
return 0;
}
return 1;
}
c********t
发帖数: 5706
49
赞,引申问一个这类题经常被问道的follow question,如何测试验证你的程序?

【在 p*****2 的大作中提到】
:
: 有其他人提出这个思路了,当时。不过我也不太懂binary的representation, 这个算法
: 应该fair吧?

l*****a
发帖数: 559
50
除了simulation,还能如何验证?

【在 c********t 的大作中提到】
: 赞,引申问一个这类题经常被问道的follow question,如何测试验证你的程序?
相关主题
推荐一个random generation的总结这个题怎么做啊?
心情坏到极点facebook intern 面经
请教电面试题random numbers
进入JobHunting版参与讨论
c********t
发帖数: 5706
51
不知道。但觉得验证random的方法应该也可以用来验证概率吧。

★ 发自iPhone App: ChineseWeb 7.8

【在 l*****a 的大作中提到】
: 除了simulation,还能如何验证?
e*****r
发帖数: 93
52
第一题在树状数组里面有用,是标准做法,用做数多少个1的话,渐进复杂度和直接扫
一遍一样的。。。数多少个1有更快的做法
M********5
发帖数: 715
53
刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
准备的还是不够,希望能对其他找工作的人有帮助。
一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
另外两道题
1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
)”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下
2 第二道题,以1/(2^n)的概率返回1,其它的时候返回0,题目应该假设有个函数可以
生成1或者0,以1/2的概率
我当时想了一下,最intuitive的想法是先产生一个数,num = 1< (double)num * rand();
当时写的时候没有把num转化成double,这是一个bug,并且我觉得这个bug其实是不
应该的,也是个很关键的bug。 然后他不满意,我也知道,我说n很大的时候num会
overflow,这个时候有两种解决方式,一种是用BigInt,还有一种用divide and
conque,举了个例子,如果int是16位的话,那么n大于16的时候,就不断地divide and
conque,直到小于16为止。
然后我第二天把这个问题想了一想,我现在来讲,比较好的解决方法是:
int probability(int n){
std::vector vec_n;
int i;
for(i=0; i int t = fun_0_1();
vec_n.push_back(t);
}
if( vec_n[0] == 1 )
for(i=1; i if( vec_n[i]==1 )
break;
}
if( i==n )
return 1;
else
return 0;
}
说实话,题目不难,但是第一题,我真是没看出来他想要什么样的答案,并且最后他要
的这个答案的方向,我觉得很奇怪,其实我最后给他的答案跟他这个意思也很相近了,
但是他觉得这不是他想要的,我也没有办法。
第二题,说实在的,我觉得divide and conquer是可行的,并且这个方法的效率也不差
,但是我觉得最后的code写得还是很不完美的,有两个地方我做的不好,一个是不能假
设int为16位,可以用sizeof函数算出来,第二个我divide and conquer的时候没有考
虑到奇数偶数的问题,这个应该是考虑到的,不然没有办法保证产生的概率是1/(2^n)
不过其实我依然觉得,这个题目不难,但是也不像想象中的那么简单,主要是这些并不
是常见的算法和数据结构的题目,没有碰到的时候,你一下子能不能有最好的思路,这
个很难说。
最后希望大家面g家的人好运了,如果能碰到相同的题目,算是对你有点帮助了。
x*****e
发帖数: 9
54
第二题我觉得可以这样来做。
假设有个函数f以1/2的概率产生1和0
记i=1,用f产生一个数字。如果是0的话,停止
如果是1的话,记i=2,继续用函数f产生是1或者0。如果是0停止,如果是1继续这个迭
代步骤,直到i=n。
以n=2为例。产生0的概率是1/2+1/4=3/4,产生1的概率就是1/4
X****y
发帖数: 33
55
楼上正解。。

【在 x*****e 的大作中提到】
: 第二题我觉得可以这样来做。
: 假设有个函数f以1/2的概率产生1和0
: 记i=1,用f产生一个数字。如果是0的话,停止
: 如果是1的话,记i=2,继续用函数f产生是1或者0。如果是0停止,如果是1继续这个迭
: 代步骤,直到i=n。
: 以n=2为例。产生0的概率是1/2+1/4=3/4,产生1的概率就是1/4

e****b
发帖数: 25
56
第一题不就是想你说可以算一个数二进制1的个数呗 我认为
w**********o
发帖数: 140
57
2.
It's a variation of unbiased coin.
Python version
====================================
import random
def getProb(n):
for i in xrange(n):
if toss() == 0:
return 0
return 1
def toss():
return random.choice([0,1])
g*****y
发帖数: 1120
58
不错,比n个bits生成一个特定数一样效果但省事

【在 x*****e 的大作中提到】
: 第二题我觉得可以这样来做。
: 假设有个函数f以1/2的概率产生1和0
: 记i=1,用f产生一个数字。如果是0的话,停止
: 如果是1的话,记i=2,继续用函数f产生是1或者0。如果是0停止,如果是1继续这个迭
: 代步骤,直到i=n。
: 以n=2为例。产生0的概率是1/2+1/4=3/4,产生1的概率就是1/4

w********s
发帖数: 1570
59
第一题,其他方法包括:
1, bit count(n)
如果"1"为1个,那么就是2^n,可以用1条cpu instruction解决,叫popcnt,如果面试
你的不知道什么叫popcnt,那么太差劲了。
2, bsr == bsf,也就是左边数起1的位置==从右边数起1的位置
2条386汇编解决。

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

w********s
发帖数: 1570
60
第一题还可以用来测试奇偶吧
n & (n - 1) == n - 1
n & (n - 1) == n - 2

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

相关主题
c++中rand() 这个函数怎么实现的?how to shuffle a deck of cards?
关于2D, 3D平面上点的问题?如果给随即函数rand[1,5] 如何产生rand[1,7]
Randomly shuffle decks of cards请教个弱题:random generator: from 1~5 to 1~7
进入JobHunting版参与讨论
w********s
发帖数: 1570
61
第二题,递归
int rand2()
{
return rand() > (RAND_MAX >> 1);
}
int randn(int n)
{
if (n == 1) return rand2();
return randn(n - 1) && rand2();
}

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

b****f
发帖数: 138
62
Mark
f********x
发帖数: 2086
63

-1
能再解释一下他想要的第一题的答案么?“改变最后一位不是0的数字”?

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

w*****d
发帖数: 105
64
2 第二道题,以1/(2^n)的概率返回1,其它的时候返回0,题目应该假设有个函数可以
生成1或者0,以1/2的概率
n次rand()都是1(或都是0)的概率就是1/2^n。
p*******i
发帖数: 190
65
第一题 是 想问 memory address alignment 吧

-1

【在 M********5 的大作中提到】
: 刚收到消息,悲剧了,意料之中,不过我也还ok,还有其他公司move on吧,可能今年
: 准备的还是不够,希望能对其他找工作的人有帮助。
: 一共三题,有一道是c++的基础题,那个很简单,基本你要是会c++应该就会写。
: 另外两道题
: 1 第一道题,是说你知道(n&(n-1))得出什么结果吗?
: 这个好答,我当时说这个我见到过,是看一个数是不是2^n,然后他问,除了这个之
: 外,还可以用在别的地方吗?然后他问了这个之后,我主要是不知道他要问的point在
: 哪。。。最后兜兜转转地跟他聊了很多,结果最后终于知道,他要的答案是,“n&(n-1
: )”改变最后一位不是0的数字。I mean,这个我未必不知道,但是他问我还可以用来做
: 什么的时候,我确实不知道他想要什么答案,因为这个可能可以用在很多情况下

s******u
发帖数: 550
66
thanks for sharing,
l*****8
发帖数: 1083
67
Mark

★ 发自iPhone App: ChineseWeb 8.6

【在 s******u 的大作中提到】
: thanks for sharing,
g*********e
发帖数: 14401
68
第二题
int foo(int n) {
for(int i=0; i if(halfChanceTrue()) return 0;
return 1;
}
T*****u
发帖数: 7103
69
第二题就产生n个[0 1]随机数,乘一起是不是就行了?
1 (共1页)
进入JobHunting版参与讨论
相关主题
c++中rand() 这个函数怎么实现的?G家面经总结,顺便求个bless,和一起找工作的同学们共勉
关于2D, 3D平面上点的问题?问一个面试题
Randomly shuffle decks of cards微软onsite SDET 面经
how to shuffle a deck of cards?discuss an array rearrange question
如果给随即函数rand[1,5] 如何产生rand[1,7]interview中被问到没有的做过的东西怎么回答?
请教个弱题:random generator: from 1~5 to 1~7推荐一个random generation的总结
Google面试回来心情坏到极点
G家onsite 随机数一题请教电面试题
相关话题的讨论汇总
话题: int话题: return话题: 题目话题: rand话题: 概率