Description
游乐园的天空中飘满了气球,明明对这些气球突然有了兴趣,他需要你的帮助
你将会被告知气球的数量以及每个气球的颜色
相同颜色的气球数量被称为这种颜色的频率。
Input
第一行为N(N<=100),接下来的N行为1~N个气球的颜色(单词的长度不超过14个字母)
Output
第一行为气球颜色的总数.
从第二行开始,按照以下规则输出:
先输出最大频率(占一行);
再按词典顺序输出是这种频率的颜色,一种颜色占一行。
对其它所有频率按从大到小的顺序进行相同的操作(要保证操作了所有的频率与颜色)。
Sample Input
5 green red blue red red 3 pink orange pink
Sample Output
3 3 red 1 blue green 2 2 pink 1 orange
KEY:这个难是难在输出,可以使用基数排序,然后输出,或者先按字母排完在排个数,都行(多关键字排 序)
Source:
#include < iostream >
using namespace std;
struct node
... {
char name[50];
int num;
} ;
int N;
int m;
node p[ 200 ];
int n;
int find( char str[])
... {
for(int i=1;i<=m;i++)
...{
if(!strcmp(p[i].name,str)) return i;
}
return 0;
}
void count()
... {
char str[50];
int i,t;
for(i=1;i<=N;i++)
...{
cin>>str;
if(i==1)
...{
strcpy(p[i].name,str);
p[i].num++;
m++;
}
else
...{
t=find(str);
if(t==0)
...{
m++;
strcpy(p[m].name,str);
p[m].num++;
}
else
...{
p[t].num++;
}
}
}
}
void sort()
... {
int i,j;
node t;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
...{
if(strcmp(p[i].name,p[j].name)<0)
...{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
void output()
... {
int swap=0;
cout<<m<<endl;
for(int n=N;n>=0;n--)
...{
for(int i=1,swap=0;i<=m;i++)
...{
if(swap==0&&p[i].num==n)
...{
cout<<p[i].num<<endl<<p[i].name<<endl;
swap=1;
continue;
}
if(p[i].num==n)
...{
cout<<p[i].name<<endl;
}
}
}
}
int main()
... {
//freopen("1975.txt","r",stdin);
cin>>N;
count();
sort();
output();
}
#include < iostream >
using namespace std;
struct node
... {
char name[50];
int num;
} ;
int N;
int m;
node p[ 200 ];
int n;
int find( char str[])
... {
for(int i=1;i<=m;i++)
...{
if(!strcmp(p[i].name,str)) return i;
}
return 0;
}
void count()
... {
char str[50];
int i,t;
for(i=1;i<=N;i++)
...{
cin>>str;
if(i==1)
...{
strcpy(p[i].name,str);
p[i].num++;
m++;
}
else
...{
t=find(str);
if(t==0)
...{
m++;
strcpy(p[m].name,str);
p[m].num++;
}
else
...{
p[t].num++;
}
}
}
}
void sort()
... {
int i,j;
node t;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
...{
if(strcmp(p[i].name,p[j].name)<0)
...{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
void output()
... {
int swap=0;
cout<<m<<endl;
for(int n=N;n>=0;n--)
...{
for(int i=1,swap=0;i<=m;i++)
...{
if(swap==0&&p[i].num==n)
...{
cout<<p[i].num<<endl<<p[i].name<<endl;
swap=1;
continue;
}
if(p[i].num==n)
...{
cout<<p[i].name<<endl;
}
}
}
}
int main()
... {
//freopen("1975.txt","r",stdin);
cin>>N;
count();
sort();
output();
}