问题描述:
设x为出现0的次数,则1出现次数为23333333-x,最后代入公式从1开始遍历即可:
#include <bits/stdc++.h>
using namespace std;
const int all=23333333;
const double num=11625907.5798;
int main()
{
for(double i=1;i<=all;i++)
{
double x=i/all;
double y=(all-i)/all;
double tmp=-x*log2(x)*i-y*log2(y)*(all-i);
if(fabs(tmp-num)<=0.0001)
{
cout<<(long long)i<<endl;
break;
}
}
return 0;
}
注:由于浮点数精度问题,所以只要两数相差<=0.0001就可当作相等。
结果:11027421