几个月没做题了.qsort的cmp函数都忘得差不多了,翻回原来的笔记,瞟了一下,改了又改,费了好大劲才ac着到简单题...贴出来留念一下..找到工作后的第一次热身赛.....
Problem D:统计数字
Time Limit:1000MS Memory Limit:65536K
Total Submit:59 Accepted:24
Language: not limited
Description
由键盘给出n个1至1000之间的数字,统计各种数值出现的次数,输出出现次数由多到少排前5位的数值及其出现的次数(如果有多个数值出现的次数相同,则数值小的优先输出)
Input
输入第一个数值为给出的数值个数n(n在20到10000之间,即最多会有10000个数值需统计),此后为n个数值
Output
输出5行,每行有两个数,由一个空格隔开,前一个为数值,后一个为出现的次数。
Sample Input
Sample Output
5 3 6 2 8 2 1 1 2 1
20 1 2 3 4 5 6 7 8 9 10 11 5 6 12 5 8 13 14 15 16
#include<cstdio>
#include<cstdlib>
typedef struct
{
int num; int count;
}
nu;
int num;
int top;
nu nuuu[10001];
int nuu[1001];
int cmp(const void *a,const void *b)
{
if(((nu*)b)->count!=((nu*)a)->count)
return ((nu*)b)->count-((nu*)a)->count;
else return ((nu*)a)->num-((nu*)b)->num;
}
int main()
{
int temp,i;
//freopen("1.in","r",stdin);
scanf("%d",&num);
for(i=0;i<num;i++)
{
scanf("%d",&temp);
nuu[temp]++;
}
top=0;
for(i=0;i<1001;i++)
{
if(nuu[i])
nuuu[top].num=i,nuuu[top++].count=nuu[i];
}
qsort(nuuu,top,sizeof(nu),cmp);
for(i=0;i<5;i++)
printf("%d %d/n",nuuu[i].num,nuuu[i].count);
return 0;
}