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

摘要:
众所周知,不同的数字不超过10000个。现在我们需要计算这些自然数的出现次数,并按照自然数从小到大的顺序输出统计结果。输入和输出样本样本输入/输出样本测试点#1输入示例:8242451002100输出示例:2342511002描述40%的数据满足:1˂=n˂=100080%的数据满足1˂=n˂=50000100%的数据符合:1˂=n˂=20000000,每个数字不超过1500000000NOIP2007改进第一个想法:首先,按升序排序输入数据,然后从开头找到数字的数目,记住找到的标记,然后计数器++可以如下编码:1#include 2#包含 3intfun//按升序排序4{5return*a-*b;6}7intmain()8{9intn,i,lala,j;10intans=0;11inta[20000];12scanf;13for14{15scanf,16}17qsort;18for19{20if(a[i]!

题目描述 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 intmain()
8 {
9     intn,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("");
33             ans=0;
34 }        
35 }
36     return 0;
37 }

免责声明:文章转载自《洛谷-统计数字-NOIP2007提高组复赛》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python3邮件添加图片SFINAE and enable_if下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章