【题目描述】
小民所在的班级有 n 名同学,这 n 名同学的姓名都是由小写英文字母组成的,这些同学的姓名中包含空格。现在小民想知道这 n 名同学的姓名中哪个英文字母出现次数最多,其出现次数是多少?请你帮助小民编程求解该问题。
【输入格式】
第一行,1 个整数 n,表示该班学生的人数。
之后为 n 行字符串(每行字符串不超过 30 个字符),表示 n 个同学的姓名。
【输出格式】
多行,出现次数最多的字母字符和次数,并用空格隔开;若有多个字符出现最多次数, 则分行输出。
#include <stdio.h> // 引入标准输入输出库
#include <string.h> // 引入字符串处理库
#define NUM 100 // 定义常量NUM为100,表示最多可以处理100个字符串
int main()
{
char str[NUM][30]; // 定义一个二维字符数组,用于存储NUM个字符串,每个字符串最大长度为29(加上结束符'\0')
int count[26]={0}; // 定义一个整型数组,用于统计26个字母的出现次数,初始化为0
int n=0; // 定义变量n,用于存储用户输入的字符串数量
scanf("%d\n",&n); // 从标准输入读取字符串数量,并存储在n中
for(int i=0;i<n;i++) // 循环n次,读取每个字符串
{
gets(str[i]); // 使用gets函数读取一行字符串,存储在str数组中
}
for(int i=0;i<n;i++){ // 循环遍历每个字符串
for(int j=0;str[i][j]!='\0';j++) // 循环遍历字符串中的每个字符,直到遇到结束符'\0'
if(str[i][j]!=' ') // 如果当前字符不是空格
count[str[i][j]-'a']++; // 将当前字符转换为小写字母,并更新对应字母的计数
}
int maxCount=0; // 定义变量maxCount,用于存储出现次数最多的字母的计数
for(int i=0;i<26;i++) // 循环遍历count数组
{
if(count[i]>maxCount) // 如果当前字母的计数大于maxCount
maxCount=count[i]; // 更新maxCount为当前字母的计数
}
for(int i=0; i<26; i++){ // 循环遍历count数组
if(count[i]==maxCount) // 如果当前字母的计数等于maxCount
printf("%c %d\n",'a'+i, maxCount); // 输出当前字母和它的计数
}
return 0; // 程序结束,返回0
}