問題描述
對于一個長度為?23333333的 01 串, 如果其信息熵為?11625907.5798, 且 0 出現次數比 1 少, 那么這個 01 串中 0 出現了多少次?
?
?
#include<iostream>
#include<cmath>
using namespace std;int n = 23333333;int main()
{//枚舉 0 出現的次數//因為 0的個數比 1的個數少,所以一定不會超過 n的一半for(int i=1; i<=n/2; ++i){int j = n-i; //1 出現的次數double a = 1.0*i/n;double b = 1.0*j/n;double ans = i*-1.0 * a*log2(a) + j*-1.0 * b*log2(b); //i, j為次數 //不能直接判斷相等,控制精度是 4 位 if(ans>11625907.5 && ans<11625907.6){cout<<i;return 0;}} return 0;
}