其实一看这道题,我有点无语,我不知道该怎么控制让输入结束的,后来看了别人的讨论就是判断是否输入的为空就可以结束了,说实话我写的代码我自己测试的时候就算是为空也输入不结束的,但是交上去就结束了,有点无语,不过还是就是那样用快排过了!
#include<iostream>
#include<string>
using namespace std;
struct fun
{
char s[33];
}rr;
int b[1000005];
fun a[1000005];
int cmp(const void *a,const void *b)
{
return strcmp(((fun *)a)->s,((fun *)b)->s);
}
int main()
{
int i,j,k;
i=0;
while(gets(a[i].s)!=NULL)
// while(scanf("%s",a[i].s)!=NULL)
{
// gets(a[i].s);
// if(strcmp(a[i].s,"0")==0)
// break;
b[i]=1;
i++;
}
qsort(a,i,sizeof(fun),cmp);
j=0;
for(k=1; k<i; k++)
{
if(strcmp(a[j].s,a[k].s)==0)//相等
{
b[j]++;
b[k]=-1;
}
else
j=k;
}
double m;
for(j=0; j<i; j++)
{
if(b[j]!=-1)
{
k=0;
while(a[j].s[k]!='\0')
printf("%c",a[j].s[k++]);
m=1.0*b[j]/(i*1.0);
printf(" %.4lf\n",m*100);
}
}
return 0;
}