2012-2-25面试题目

来源:互联网 发布:炒股软件使用书籍 编辑:程序博客网 时间:2024/06/06 01:08

1.五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;.....其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?

解:

  参考答案:先给这堆桃子加上4个,设此时共有X个桃子,最后剩下a个桃子.这样:   第一只猴子分完后还剩:(1-1/5)X=(4/5)X;   第二只猴子分完后还剩:(1-1/5)2X;  第三只猴子分完后还剩:(1-1/5)3X;  第四只猴子分完后还剩:(1-1/5)4X;  第五只猴子分完后还剩:(1-1/5)5X=(1024/3125)X;  得:a=(1024/3125)X;  要使a为整数,X最小取3125.  减去加上的4个,所以,这堆桃子最少有3121个。

2.已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。
(这题主要考的是对概率的理解。程序关键是要算出rand10,1到10,十个数字出现的考虑都为10%.)

根据排列组合,连续算两次rand7出现的组合数是7*7=49,这49种组合每一种出现考虑是相同的。怎么从49平均概率的转换为1到10呢?方法是:1.rand7执行两次,出来的数为a1.a2.2.如果a1*7+a2<40,b=(a1*7+a2)/10+1,如果a1*7*a2>=40,重复第一步)。参考代码如下所示:int rand7()  {    return rand()%7+1;  }    int rand10()  {    int a71,a72,a10;    do     {      a71= rand7()-1;      a72 = rand7()-1;      a10 = a71 *7 + a72;    } while (a10>= 40);    return (a71*7+a72)/4+1;  }  


3.未完待续

原创粉丝点击