[算法笔记]选二取一

来源:互联网 发布:mac隐藏下方菜单栏 编辑:程序博客网 时间:2024/06/14 17:11

昨天晚上看番的时候看到一个有趣的情景:某个学校的入学考试只选取参考人数的一半的同学,全部同学被随机分队,每队两个人互相切磋,只有胜者才能胜利进入学校。

学校的目的应该是选出前百分之50的人

于是我就想,这应该是一种极其低效的方法,这样筛选出来的同学不仅包含了差生(后百分之50),还把优生给刷走了…

但问题来了,这种筛选的方法虽然高效,但具体的误差是多少呢

当即就写了个控制台看看,发现总共测了1000组5万人的数据,平均值在0.372531 (就是选出来的优生(前百分之50)占总人数的比例)

用数学方法怎么证明现在还在想。。

#include<iostream>#include<stdlib.h>#include<Windows.h>using namespace std;const int Number = 50000; int MaxPower;float ANS[1000];double average(int n){    if (!n)    {        return 0;    }    else    {        return ANS[n - 1] / 1000 + average(n - 1);    }}int main(){    int Students[Number];    int k = 0;    for (MaxPower = 20; MaxPower < 1020; MaxPower++)    {           int ans = 0;        for (int i = 0; i < Number; i++)        {            Students[i] = rand() % MaxPower;            if (i % 2 == 1)            {                if (max(Students[i - 1], Students[i]) > (float)MaxPower/2)                    ans++;            }        }        ANS[k++] = (float)ans / Number;        // cout << ANS[k - 1] << endl;    }    cout << average(1000);    system("pause");    return 0;}
原创粉丝点击