F - What a Simple Research(熟悉结构体快排)

题目
在这里插入图片描述
思路:
数给出给定字符串数组中A ,C, D, E, G字母出现的次数,并按出现次数由高到低排列(若次数相同,按字典序排序);若出现次数为0,不输出;
用结构体快排即可;

AC代码

#include <bits/stdc++.h>

using namespace std;
char s[25][25];
struct node
{
    char c;
    int id;

} a[30];
bool cmp(struct node a,struct node b)//熟悉结构体快排
{
    return a.id>b.id;
}
int main()
{
    int n,m,i,j;
    while(~scanf("%d %d",&n,&m))
    {
        if(n==0&&m==0) break;
        for(i=0; i<n; i++)
        cin>>s[i];
        a[1].c='A';
        a[2].c='C';
        a[3].c='D';
        a[4].c='E';
        a[5].c='G';
        for(i=1; i<=5; i++)
        a[i].id=0;
        for(i=0; i < n; i++)
        {
            for(j=0; j < m; j++)
            {
                if(s[i][j]=='A') a[1].id++;
                else if(s[i][j]=='C')a[2].id++;
                else if(s[i][j]=='D')a[3].id++;
                else if(s[i][j]=='E')a[4].id++;
                else if(s[i][j]=='G')a[5].id++;

            }
        }
        sort(a+1,a+6,cmp);
        int c=0;
        for(i=1; i<=5; i++)//以下是和队友学习的方法
        {
            if(a[i].id!=0)
                c++;//计算出现次数不为0的字母数
        }
        int num=0;
        for(i=1; i<=5; i++)
        {
            if(a[i].id!=0)
            {
                num++;
                if(num<c)
                    printf("%c %d ",a[i].c,a[i].id);//不是最后一个需要加空格控制
                else printf("%c %d",a[i].c,a[i].id);
            }

        }
     printf("\n");//wrong了好多次,错在这里忘记加换行;
    }
    return 0;
}
发布了90 篇原创文章 · 获赞 18 · 访问量 3379

猜你喜欢

转载自blog.csdn.net/sherry_zhen/article/details/102870154