洛谷-统计数字-NOIP2007提高组复赛

题目描述 Description

某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
 输入输出格式 Input/output
输入格式:
输入文件count.in包含n+1行;
第一行是整数n,表示自然数的个数;
第2~n+1每行一个自然数。
输出格式:
输出文件count.out包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
 输入输出样例 Sample input/output
样例测试点#1

输入样例:

8
2
4
2
4
5
100
2
100
输出样例:

2 3
4 2
5 1
100 2
说明 description

40%的数据满足:1<=n<=1000
80%的数据满足:1<=n<=50000
100%的数据满足:1<=n<=200000,每个数均不超过1500 000 000(1.5*109)
NOIP 2007 提高第一题

思路:首先要对输入的数据进行升序排序,然后从头开始找数字出现的个数,找过的记得标记(我这里标记为-100),然后计数器++即可

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int fun(const void *a,const void *b)//升序排序 
 4 {
 5     return *(int*)a-*(int*)b;
 6 }  
 7 int main()
 8 {
 9     int n,i,lala,j;
10     int ans=0;
11     int a[200000];
12     scanf("%d",&n);
13     for(i=0;i<n;i++)
14     {
15         scanf("%d",&a[i]);
16     }
17     qsort(a,n,sizeof(int),fun);
18     for(i=0;i<n;i++)
19     {
20         if(a[i]!=-100)
21         {
22             lala=a[i];
23             for(j=0;j<n;j++)
24             {
25                 if(a[j]==lala) 
26                 {
27                     ans++;
28                     a[j]=-100;
29                 }            
30             }
31             printf("%d %d",lala,ans);
32             printf("\n");
33             ans=0;
34         }        
35     }
36     return 0;
37 }

 

posted @ 2016-01-30 11:08  Memoryヾノ战心  阅读(990)  评论(0编辑  收藏  举报