統計出現次數最多的整數(新手上路,請多包涵)
問題描述
編寫一個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數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對出現次數最多次的數組下标進行标記,這個下标就是我們輸入的值。
本人新手小萌新一枚,這篇部落格是我的第一次書寫,有許多錯誤的地方還希望大家多多包涵,哈哈哈!祝大家生活愉快!