【第14届蓝桥杯C/C++B组省赛】01串的熵

问题描述

算法思想

首先分析题目中给出的公式

S = 100时,其信息熵为

H(S)=−p(0)log2​(p(0)) − p(0)log2​(p(0)) − p(1)log2​(p(1))

继续化简公式得

设0出现的次数为x,1出现的次数为3-x

H(S)=−x * p(0) * log2​(p(0)) − (3-x) * p(1) * log2​(p(1))

现在,我们有一个长度为23333333的01串,其信息熵已知为11625907.5798。题目还告诉我们,0出现的次数比1少。我们的任务是计算出0出现的次数。

为了解决这个问题,我们只需暴力枚举01串,计算出相应的信息熵和已知条件对比,由于0出现的次数比1少,我们只需遍历到数组的一半位置即可

参考代码

cs 复制代码
#include<stdio.h>
#include<math.h>
int main(int argc,char *argv[])
{
	double n = 23333333;
	double zeroSum = 0;
	int zero,one;
	for(zero = 0; zero <= n / 2;++zero)
	{
		one = n - zero;
		zeroSum = -zero * (zero / n) * log2(zero / n) - one * (one / n) * log2(one / n);
		if(zeroSum > 11625907.5 && zeroSum < 11625907.6)
		{
			printf("%d",zero);
			break;
		}
	}
	return 0;
}

答案:

相关推荐
leo__52027 分钟前
IEC 104 协议 C 语言实现
c语言·数据库
CHANG_THE_WORLD27 分钟前
python 批量终止进程exe
开发语言·python
古城小栈29 分钟前
从 cargo-whero 库中,找到提升 rust 的契机
开发语言·后端·rust
学涯乐码堂主1 小时前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa1 小时前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073212 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
Gary Studio2 小时前
安卓HAL C++基础-智能指针
开发语言·c++
啧不应该啊2 小时前
Day1 Python 与 C 的类型区别
c语言·开发语言
cen__y2 小时前
Linux07(信号01)
linux·运维·服务器·c语言·开发语言
xingpanvip3 小时前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua