题目描述
输入一组单词,统计不同单词的个数,按单词个数升序输出统计结果(个数相同时,按单词升序排列)
输入
输入格式为每行一个单词,单词长度不超过20,单词之前无其他符号,单词之后直接换行
读取输入直到输入结束(不超过50行)
输出
样例输入
red
red
blue
green
样例输出
blue 1
green 1
red 2
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
int n=0,i,t,k,a[60];
char b[60][30],c[30];
while(scanf("%s",b[n])!=EOF){
a[n]=1;
n++;
}
for(i=0;i<n;i++)
{
for(t=i+1;t<n;t++)
{
if(a[i]==0)continue;
if((strcmp(b[i],b[t])==0))
{
a[i]+=1;
a[t]=0;
}
}
}
for(i=0;i<n-1;i++)
{
for(t=i+1;t<n;t++)
{
if(a[i]>a[t])
{
strcpy(c,b[i]);
strcpy(b[i],b[t]);
strcpy(b[t],c);
k=a[i];a[i]=a[t];a[t]=k;
}
}
}
for(i=0;i<n-1;i++)
{
for(t=i+1;t<n;t++)
{
if((a[i]==a[t])&&(strcmp(b[i],b[t])>0))
{
strcpy(c,b[i]);
strcpy(b[i],b[t]);
strcpy(b[t],c);
k=a[i];a[i]=a[t];a[t]=k;
}
}
}
for(i=0;i<n;i++)
{
if(a[i])printf("%s %d\n",b[i],a[i]);
}
return 0;
}