IT面试题参考

新文章移至 
http://cffile.sinaapp.com/?p=37
 

奉献给大家

/////////////////////////////////////////////////////////////

12个球有一个球重量不一样,称三次找出

12个球编号1~12,设不同的球为x,第一次分成3组,每组4

一、1234 = 567x9~12

()9=10,x1112

 (1)9=11--> x=12

 (2)9>11 or 9<11 --> x=11

()9>10,则x910

 (1) 9=11 --> x=10

 (2) 9>11 or 9<11 --> x=9

()9<10, x910

 (1) 9=11 --> x=10

 (2) 9>11 or 9<11 --> x=9

 

二、1234 > 5,6,7,8 x1~8

() 1,2,6,7 = 8,9,10,11 x345

 (1) 3=4 --> x=5

 (2) 3>4 --> x=3

 (3) 3<4 --> x=4

() 1,2,6,7 > 8,9,10,11 x128中,如果异常球重的话,肯定是在12;如果异常球轻的话,肯定是8,故在128

 (1) 1=2 --> x=8

 (2) 1>2 --> x=1

 (3) 1<2 --> x=2

() 1,2,6,7 < 8,9,10,11 x67

 (1) 1=6 --> x=7

 (2) 1>6 or 1<6 --> x=6

 

三、1234 < 5,6,7,8 x1~8

() 1,2,6,7 = 8,9,10,11 x345

 (1) 3=4 --> x=5

 (2) 3>4 --> x=4

 (3) 3<4 --> x=3

() 1,2,6,7 > 8,9,10,11 x67

 (1) 1=6 --> x=7

 (2) 1>6 or 1<6 --> x=6

() 1,2,6,7 < 8,9,10,11 x128

 (1) 1=2 --> x=8

 (2) 1>2 --> x=2

 (3) 1<2 --> x=1

 

 

///////////////////////////////////////////////////////

一随机数以概率 p 生成0,以概率(1-p)生成1,怎样生成等概率的 0 1

 

这涉及到概率 分布的内容了,其实也简单只要能找到一个概率为1/2p的函数就解决了.

 

另外还有一个比较方便的实现:

一随机数f(x)以概率 p 生成0,

那么设g(x)=f(x)>0?0:1; g(x)以概率 1-p 生成0.

所以f(x),g(x)同时生成0的概率为p(1-p)等于同时生成1的概率.

得等概率随机数

function g(x){

 int v=f(x)+g(x);

 if(v==0){

    return 0; //1.f(x)g(x)同时为0

 else if(v==2){

    return 1; //2.f(x)g(x)同时为1

 }else{

    g(x); //3.f(x)g(x)一个为0一个为1,重新生成随机数

 }

}

 

上面第3步的概率为p^2+(1-p)^2

 

 

////////////////////////////////////////////////////////////////////////////

有101个硬币,100个真的,1个假的,形状相同,重量不一样,用无码天秤称,称两次,假币重还是真币重?

把101个硬币平均分成三份,分别是:33,33,34,把两 堆33个放在天平上称,

 

1、如果平衡,说明这66个都是真的。然后从这两堆共66个中取出34个,与第三堆的34个分别放在天平的左右盘中称,这样,第三堆所在的天平的那一端的轻重就是假币的轻重情况。

 

2、如果两 个33放在天平上不平衡,说明第三堆的34个是真的。取下轻的一端的33个,从第三堆中取33个放在上面,如果平衡,说明取下的一堆中有假币,假币比真的轻。如果不平衡,只有一种结果,第三堆与取下的一堆一样,都比那一堆轻,说明假的比真的重。

 

/////////////////////////////////////////////////////////////////////

一串长为M的珠子,珠子的颜色有N(N<10)。求包含N种颜色的最短连续珠串。

 

两个指针,开始的时候都指向某一个位置,移动前一个指针,直到两个指针直接包含了所有颜色的珠子。
此时记下len
然后向前移动后面的指针,再调整最前面的指针,直到重新满足两个指针间包含了所有的颜色,比较此时的len和之前的len,取最小值。
如此移动(移动后面的指针,再调整最前面的指针),直到后面的指针回到起始位置。
时间复杂度是OM),空间复杂度是O(1)

posted @ 2011-10-27 15:47  cffile  阅读(160)  评论(0编辑  收藏  举报
google