统计出现次数最多的整数(新手上路,请多包涵)
问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:
第一行是一个整数N ,接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:
输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150
思路简介
本题不难看出统计所输入的所有数字的个数,然后在输出现次数最多的数字,注意:还有一个需要思考的问题就是出现次数相同的两个元素,要比较大小,取最小的那个元素值
-
输入:1 2 3 4 5 1 2 3 4 5
输出:1 -
输入:1 1 1 2 2 2 2 3 4 5
输出:2
接下来上代码分析
#include<stdio.h>
int a[1000001]={
0};//定义一个元素值全为0的数组a[1000001],
int n;
int main(){
int i,j,k,max=0;//最开始先令max=0
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&k);//输入n个元素
a[k]++;//这行很重要,可以统计你所输入元素的次数
}
for(i=0;i<=1000000;i++){
if(a[i]>a[max]) max=i;//从数组a[1]的元素值开始与max进行比较大小,如果大于max则令max的值=i(对i进行标记)找出次数最多的那个下标
}
printf("%d",max);//输出max
}
a[k]++;就是将数组中的下标换成我们对应的输入值,可以快速统计出现次数(a[k]初始次数都是0)以下是列举几个例子:
输入 | a[k]++ |
---|---|
25 | 1 |
25 | 2 |
2 | 1 |
1 | 1 |
1 | 2 |
if(a[i]>a[max]) max=i;就是用从小到大进行比较,并用max对出现次数最多次的数组下标进行标记,这个下标就是我们输入的值。
本人新手小萌新一枚,这篇博客是我的第一次书写,有许多错误的地方还希望大家多多包涵,哈哈哈!祝大家生活愉快!