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;
}
YOYO's Note:
不過是輸入,比較,計數,最後排序輸出而已。資料很弱,是以這個程式是0.00s……
比賽當時很緊張,題目都沒有好好審。
在輸出的時候我看到SAMPLE順序,還以為是按輸入的倒序輸出,
花了很長時間去想倒序要怎麼寫,送出WA了之後認真地看了一下題目,
才發現有按詞典順序輸出 - - !超郁悶地亂寫了個sort,一下AC。
那個時候我還不會用STL,自己亂寫的不倫不類,既不選擇又不冒泡……
至今還不會寫…… T-T 資料結構這方面真的是爛到可以……