众数是指在一组数据中,出现次数最多的数。例如:1, 1, 3 中出现次数最多的数为 1,则众数为 1。
给定一组数,你能求出众数吗?
输入格式:
输入数据有多组(数据组数不超过 50),到 EOF 结束。
对于每组数据:
第 1 行输入一个整数 n (1 <= n <= 10000),表示数的个数。
第 2 行输入 n 个用空格隔开的整数 Ai (0 <= Ai <= 1000),依次表示每一个数。
输出格式:
对于每组数据,在一行中输出一个整数,表示这组数据的众数。
数据保证有唯一的众数。
输入样例1:
3
1 1 3
输出样例1:
1
输入样例2:
5
0 2 3 1 2
输出样例2:
2
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
-
定义一个数组
numbers
来统计每个数字出现的次数,数组的大小为1000,因为题目给定数的范围是0到1000。 -
初始化最大出现次数
maxCount
为0,众数mode
为0。 -
接下来使用循环,每次循环读取一个数并将对应的计数加1。
-
如果当前数字的计数大于最大计数
maxCount
,则更新最大计数和众数。 -
输出众数。
代码
#include <stdio.h>
int main() {
int n;
while (scanf("%d", &n) == 1) {
int numbers[10001] = {0}; // 定义一个数组,用来统计每个数出现的次数
int maxCount = 0; // 用来记录最大的出现次数
int mode = 0; // 众数
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
numbers[num]++; // 对应数字的计数加1
if (numbers[num] > maxCount) { // 如果当前数字的计数大于最大计数
maxCount = numbers[num]; // 更新最大计数
mode = num; // 更新众数
}
}
printf("%d\n", mode);
}
return 0;
}