2023年十四届省赛大学B组真题(共10道题)
【问题描述】
对于一个长度为 n 的 01 串 S = x1x2x3...xn.香农信息熵的定义为:
其中 p(0), p(1) 表示在这个 01 串中 0 和 1 出现的占比。
比如,对于S = 100 来说,信息熵 H(S ) = - 1/3 log2(1/3) - 2/3 log2(2/3) - 2/3 log2(2/3) = 1.3083。
对于一个长度为23333333 的 01 串,如果其信息熵为 11625907.5798,且 0 出现次数比 1 少,那么这个01 串中 0 出现了多少次?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果作为一个整数,在提交答案时只填写这个整数,填写多余的内 容将无法得分
【考点】
枚举
【分析】
直接暴力解决进行枚举。
从中间值进行枚举更快,一个一个试0和1的数量分配。
一定要注意判断信息熵时不能用等号
可以!!!!!!!!!!!!!!!!!!!!!!
if (sum > 11625907.5 && sum< 11625907.6)
也可以!!!!!!!!!!!!!!!!!!!!!!!!
if (fabs(sum - 11625907.5798) < 0.0001)
【解答】
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
double n = 23333333;
double sum;
int j;
for (j = n/2; j >=0; j--)
{
sum = 0;
sum = sum - j*(j / n)*log2(j / n);
sum = sum - (n-j)*((n - j) / n)*log2((n - j) / n);
if (sum > 11625907.5 && sum< 11625907.6)
{
break;
}
}
printf("%d",j);
return 0;
}