赞
踩
本题来自于:2023年十四届省赛大学B组真题(共10道题)
主要考察:暴力。
代码放在下面,代码中重要的细节全都写了注释,非常清晰明了:
- #include <bits/stdc++.h>
- using namespace std;
- int main()
- {
- // 请在此输入您的代码
- int n = 23333333; //01串的长度
- double target = 11625907.5798; //信息熵的目标值
- for(int i = 0; i <= n; i++){//从0开始,暴力求解
- double p0 = static_cast<double> (i) / n; //强转,让其中一方为double类型。 这一行代码是求p0的占比
- double p1 = 1 - p0; //p1的占比
- double entropy = -p0 * i * log2(p0) - p1 * (n-i) * log2(p1); //信息熵
- if(fabs(entropy - target) < 0.0001) //因为我们用double,精度会丢失,这里我们认为差值<0.0001就算相等
- {
- cout << i <<endl;//0出现的次数。 如果求1出现的次数该怎么写?n-i就行了。
- break;
- }
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。