目录
此题为自己理解,如有问题欢迎指正!如有更好的解法,可以留在评论区,共同学习!
一、题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。
(1)输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
(2)输出描述
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
(3)输入输出样例
示例 1
输入
lanqiao
输出
a
2
示例 2
输入
longlonglongistoolong
输出
o
6
二、解题思路:
1.题目要求的是,输出次数最多的字母 、及次数
2.第二条件:如果出现次数相同,比较字母的字典序,输出最小的字母
3.如何存放这个字符串,并且是能够知道它出现的次数和比较次数的大小?
通过数组,遍历比较
4.如何接受字符串?
通过循环,依次将字母放进数组中,直到‘\n’输入结束。
5.那么,每个字母的次数又怎么存放呢?再定义一个数组?
定义一个结构体数组存放字母和次数,比较过程中,字母和它所出现的次数是一体的,输出时,只要知道结构体类型数组的下标就可以输出字母和其次数。
6.如何找到次数最大字母的下标?
先确定输入的第一个字母A为最大,通过循环依次与下一个字母比较,如果下一个字母B次数更多,将最大的下标确定为B,依次与B后面的字母比较。
三、代码实现:
#include<stdio.h> //单词分析
typedef struct //定义一个结构体用于存放符和所出现的次数
{
char ch;
int count;
}number;
main()
{
number L[1000] = { 0 }; //定义一个结构体类型的数组
char ch;
int h = 0,i=0,max=0;
while ((ch = getchar()) != '\n') //while()循环将字符串输入,依次存放到数组中的ch
{
L[h].ch = ch;
h++; //通过变量h确定字符串的长度,
}
for (i = 0; i < h; i++) // 循环依次与后面字符比较,判断每个字符出现的次数
{
int j = 0;
L[i].count = 1;
for (j = i+1; j < h; j++)
{
if (L[i].ch == L[j].ch)
{
L[i].count++;
}
}
}
for (i = 1; i < h; i++) //通过循环比较数组中字符的次数大小,包括次数相等判断字符的字典序大小,确定最大值在数组中的位置
{
if (L[max].count < L[i].count)
max = i;
else if (L[max].count == L[i].count)
{
if (L[max].ch < L[i].ch)
max = max;
else
max = i;
}
else
max = max;
}
printf("%c\n", L[max].ch);
printf("%d\n", L[max].count);
}
四、运行结果:
运行实例一:
运行实例二: