蓝桥杯真题 |
您所在的位置:网站首页 › 远远超过英语造句 › 蓝桥杯真题 |
目录 一、题目描述 (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 //单词分析 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); } 四、运行结果: 运行实例一:
运行实例二: 此题为自己理解,如有问题欢迎指正!如有更好的解法,可以留在评论区,共同学习! |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |