蓝桥杯真题——单词分析(2020)c语言

目录

一、题目描述

(1)输入描述

(2)输出描述

(3)输入输出样例

二、解题思路:

三、代码实现:

四、运行结果:

此题为自己理解,如有问题欢迎指正!如有更好的解法,可以留在评论区,共同学习!


一、题目描述

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数

(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);
}

四、运行结果:

 运行实例一:

 

 运行实例二:

                                  

此题为自己理解,如有问题欢迎指正!如有更好的解法,可以留在评论区,共同学习!

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值