试题编号: 201312-1
试题名称: 出现次数最多的数
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10
先上代码
#include <stdio.h>
#include <string.h>
#define N 10000
int a[N + 1];
int main()
{
int n,num,i;
//正确的初始化数组方式
memset(a,0,sizeof(a));
scanf("%d",&n);
while(n--) {
scanf("%d", &num);
a[num]++;
}
int max,count = 0;
for(i=0;i<=N;i++)
{
//如果这个数组里的数字大于最大的频次.将新的频次更换给count,数组下标给max
if(a[i]>count)
{
max = i;
count=a[i];
}
}
printf("%d\n",max);
return 0;
}
思路:数字比较小,考虑遍历.
先将所有数字的 频次 存到数组中,然后找到最大频次的数.就是咱们要找的数.
例子:
6
1 1 2 3 3 3
数组中 (前面是下标,后面是数组中的数)
0-0
1-2
2-1
3-3
所以3是出现次数最多的数.
总结
不知道有没有人和我一个习惯,写代码的时候c++的头文件和c的头文件混用,虽然这样不好,但是也不影响做对题.但是ccf的oj比较特殊,必须只引入一类文件.
一步一步实验出来,应该就是这个问题,以后得改改了.