2017阿里实习生招聘编程题之相亲约会

题目描述: 小张很多年过年都没有回家了。这次回家父母给他安排了很多个相亲的姑娘,有一个很长的名单,长度为N. 父亲安排约会,每次随机选择一个要相亲的对象,母亲则负责记录哪些姑娘已经约会过了。直到和所有的姑娘都约会完一遍以后,这个浩大的相亲工程才会结束。这些天父母在吵架,他们之间不会有任何言语沟通。所以父亲不知道哪些姑娘已经约会过了。因此下次约会的对象很可能是以前已经约会过的。如果小张要把所有的姑娘都约会一遍,那么平均要约会多少个姑娘。

题目分析: 这道题其实思路和又放回随机抽样小球,直到所有的小球都被抽到至少一次,求抽取次数的期望类似。 (类似的题目还有,连续抛硬币,求第一次连续出现n个正面的时候,抛硬币次数的期望)

分析 :假设f(i)表示目前已经相亲了i个不同的姑娘,还要相亲才能把n个姑娘全部相亲完的期望
因为已经相亲了i个不同的姑娘后,在相亲一个姑娘,这个姑娘是这i个人中间的其中一个人的概率是i/n,是另外还没有相亲过的姑娘的概率是(n-i)/n。那么很容易得出, f(i)=inf(i)+ninf(i+1)+1 ,显然f(n)=0, 我们要求f(0)
显然, f(0)=n1+n2+n3+...nn .

//2017阿里实习生招聘编程题之相亲约会
#include
using namespace std;
int main()
{
    int n,i;
    cin>>n;
    double sum=0;
    for(i=1;i<=n;i++)
    {
        sum+=double(n)/i;
    }
    cout<<"平均要约会姑娘的个数为:"<return 0;
}

你可能感兴趣的:(编程与算法,阿里,招聘,编程)