昨天晚上看番的时候看到一个有趣的情景:某个学校的入学考试只选取参考人数的一半的同学,全部同学被随机分队,每队两个人互相切磋,只有胜者才能胜利进入学校。
学校的目的应该是选出前百分之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;
}