这个假设的电文由8个字母组成,每个字母出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。用c语言实现
时间: 2024-05-14 10:18:54 浏览: 77
统计输入字符各个字母出现频率的解题思路
5星 · 资源好评率100%
这里给出一个简单的实现,使用了rand()函数来生成随机数,根据每个字母出现的频率来选择对应的字母:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
char letters[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
float freq[] = {0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10};
int len = sizeof(letters) / sizeof(letters[0]);
int i, j;
char message[9]; // 加上 '\0' 结尾符
srand(time(NULL)); // 初始化随机数种子
for(i=0; i<8; i++) {
float r = (float)rand() / RAND_MAX; // 生成 0~1 之间的随机数
float sum = 0.0;
for(j=0; j<len; j++) {
sum += freq[j];
if(r <= sum) {
message[i] = letters[j];
break;
}
}
}
message[8] = '\0'; // 添加结尾符
printf("message: %s\n", message);
return 0;
}
```
运行结果类似如下:
```
message: eghcahde
```
阅读全文