【每天例题】蓝桥杯 C语言 单词分析
蓝桥杯 C语言 单词分析
题目


题目要求
1.寻找出现最多的字母和这 个字母出现的次数。
2.如果有多个字母出现的次数相等,输出字典序最小的那个。
思路分析
输入方法:
方法一:
1.可以通过数组来记录该单词,并为单词出现的每一个字母做上标记。
2.可以采用for循环将字符串依次输入,直到输入‘\n’为止。
方法二:
通过gets函数输入字符。
3.如何将字母与出现次数相连接起来?
方法一:可以采用双for循环模式,判断ch[i]是否与ch[j]相等,相等则count+1。
方法二:将对应字母筛入26个字母对应的数组位置中,在通过数组对应次数++
4.如何确定已经判断过的字母不会进行重复判断?
可以采取双重for循环与if合作进行判断。
5.可使用if进行对count进行判断,使其对应字母次数一直是最大。
代码:
错误代码:此代码错误在当出现两个出现次数一样大的字母时,未能输出ascll码较小的字母
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int i=0,j=0,k=0,p=0;//i与j分别主宰第一、二重循环,k为计算输入的字符串长度,p记录下标
int maxcount=0;//最大次数
int count=1;//次数,次数必须为1是因为ch[i]已经出现过一次
char ch[1000];
scanf("%s",&ch);//另一种输入方法:gets(ch);
k=strlen(ch);
for(i=0;i<k;i++)
{
for(j=i+1;j<k;j++)
{
if(ch[i]=='/')//当i是已经出现过的字母则无须再次计算
{
break;
}
if(ch[i]==ch[j])
{
ch[j]='/';
count++;
}
}
if(maxcount<count)
{
maxcount=count;
p=i;
}
count=1;
}
printf("%c\n%d",ch[p],maxcount);
return 0;
}
正确代码
#include<stdio.h> #include<stdlib.h> int main() { int i=0; int max=0;//最大次数 int maxA=0;//出现次数最多的字母的ascll码 char ch[1000]={0}; int a[27]={0};//26个字母,下标i表示第i个字母 //0号下标标记当前出现次数最多的字母 scanf("%s",&ch);//另一种输入方法:gets(ch); while(ch[i]!='\0') { int x=ch[i]-0;//获取字母ascll码 a[x-96]++;//将字母放入到ascll码对应位置,并计算次数 if(a[x-96]>max) { max=a[x-96]; maxA=x; } if(a[x-96]==max) { maxA=maxA-x>0?x:maxA;//选择ascll码小的字母 } i++; } printf("%c\n",maxA); printf("%d",max); return 0; }
运行结果



浙公网安备 33010602011771号