【每天例题】蓝桥杯 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;
 } 

 

运行结果

 

 

 

posted @ 2023-04-09 10:23  山远尽成云  阅读(114)  评论(0)    收藏  举报