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

mac2026-04-25  7

题目 思路: 数给出给定字符串数组中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; }
最新回复(0)