FJNU.1975
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
Source
2007'福建师范大学低年级学生程序设计大赛
My Program
#include
<
iostream
>
#include < string .h >
using namespace std;
char color[ 100 ][ 14 ];
int N,c = 0 ,a[ 100 ] = ... {0} ;
void InColor( char tc[])
... {
int i;
for(i=0;i<c;i++)
if(!strcmp(tc,color[i]))
...{
a[i]++;
return;
}
strcpy(color[c],tc);
a[c++]=1;
}
int main()
... {
int i,j,t;
char tc[14];
cin>>N;
for(i=0;i<N;i++)
...{
cin>>tc;
InColor(tc);
}
cout<<c<<endl;
for(i=0;i<c;i++)
for(j=i+1;j<c;j++)
if(a[i]<a[j])
...{
strcpy(tc,color[i]);
strcpy(color[i],color[j]);
strcpy(color[j],tc);
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<c;i++)
for(j=i+1;j<c;j++)
if(a[i]==a[j])
...{
t=0;
while(color[i][t]==color[j][t])
t++;
if(color[i][t]>color[j][t])
...{
strcpy(tc,color[i]);
strcpy(color[i],color[j]);
strcpy(color[j],tc);
}
}
for(i=0;i<c;i++)
...{
cout<<a[i]<<endl;
j=i;
cout<<color[i]<<endl;
while(j<c&&a[i+1]==a[j]&&i+1<c)
...{
i++;
cout<<color[i]<<endl;
}
}
return 0;
}
#include < string .h >
using namespace std;
char color[ 100 ][ 14 ];
int N,c = 0 ,a[ 100 ] = ... {0} ;
void InColor( char tc[])
... {
int i;
for(i=0;i<c;i++)
if(!strcmp(tc,color[i]))
...{
a[i]++;
return;
}
strcpy(color[c],tc);
a[c++]=1;
}
int main()
... {
int i,j,t;
char tc[14];
cin>>N;
for(i=0;i<N;i++)
...{
cin>>tc;
InColor(tc);
}
cout<<c<<endl;
for(i=0;i<c;i++)
for(j=i+1;j<c;j++)
if(a[i]<a[j])
...{
strcpy(tc,color[i]);
strcpy(color[i],color[j]);
strcpy(color[j],tc);
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<c;i++)
for(j=i+1;j<c;j++)
if(a[i]==a[j])
...{
t=0;
while(color[i][t]==color[j][t])
t++;
if(color[i][t]>color[j][t])
...{
strcpy(tc,color[i]);
strcpy(color[i],color[j]);
strcpy(color[j],tc);
}
}
for(i=0;i<c;i++)
...{
cout<<a[i]<<endl;
j=i;
cout<<color[i]<<endl;
while(j<c&&a[i+1]==a[j]&&i+1<c)
...{
i++;
cout<<color[i]<<endl;
}
}
return 0;
}
YOYO's Note:
不过是输入,比较,计数,最后排序输出而已。数据很弱,所以这个程序是0.00s……
比赛当时很紧张,题目都没有好好审。
在输出的时候我看到SAMPLE顺序,还以为是按输入的倒序输出,
花了很长时间去想倒序要怎么写,提交WA了之后认真地看了一下题目,
才发现有按词典顺序输出 - - !超郁闷地乱写了个sort,一下AC。
那个时候我还不会用STL,自己乱写的不伦不类,既不选择又不冒泡……
至今还不会写…… T-T 数据结构这方面真的是烂到可以……