CCF.出现次数最多的数

试题编号: 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比较特殊,必须只引入一类文件.
在这里插入图片描述一步一步实验出来,应该就是这个问题,以后得改改了.

发布了96 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41852212/article/details/103739638
今日推荐