112 密码分析
发布日期:2022-03-18 05:04:21 浏览次数:6 分类:技术文章

本文共 1003 字,大约阅读时间需要 3 分钟。

问题描述 :

密码分析学中常常需要统计字符出现的频度。给定若干行短文,要求按字符出现的频度由高到低输出,当两个字符出现的频度相同时,按字符大小的顺序输出。

注意:只需要统计英文字母的频度,非英文字母一律忽略。

输入说明 :

输入由多组数据组成。每组数据由一行长度不超过100的字符串组成,不区分字母大小写,如A与a看作同一个字母。

输出说明 :

对每组输入数据都有若干行输出,每行有两个输出数据,第一个数据为某个大写字母,第二个数据为该字母出现的频度,两个数据之间有一个空格。输出顺序按字母出现的频度由高到低输出,当两个字母的频度相同时,按字母大小的顺序输出。两组输出之间有一行空行。

输入范例 :

Do what you say, say what you do.

This is a test.
Count me 1 2 3 4 5.
输出范例 :

A 4

O 4
Y 4
D 2
H 2
S 2
T 2
U 2
W 2

S 3

T 3
I 2
A 1
E 1
H 1

C 1

E 1
M 1
N 1
O 1
T 1
U 1

#include
#include
#include
using namespace std;struct { int num=0;}zimu[50];int main(){ char a[1000]; while(gets(a)){ int len=strlen(a); for(int i=0;i
='a'&&a[i]<='z'){ zimu[a[i]-32-'A'].num++; }else if(a[i]>='A'&&a[i]<='Z'){ zimu[a[i]-'A'].num++; } } int max=0,k; for(int i=0;;i++){ { for(int j=0;j<26;j++){ if(zimu[j].num>max){ max=zimu[j].num; k=j; } } } if(!max) break; printf("%c %d\n",k+'A',max); zimu[k].num=max=0; } printf("\n"); } return 0;}

转载地址:https://blog.csdn.net/qq_41992047/article/details/123519004 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:111 统计候选人的票数
下一篇:99 构造序列

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月04日 04时38分47秒