1. 程式人生 > >[藍橋杯]ALGO-90.演算法訓練_出現次數最多的整數

[藍橋杯]ALGO-90.演算法訓練_出現次數最多的整數

 

 問題描述
  編寫一個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數N也是由使用者輸入的,最多不會超過20。然後程式將對這個陣列進行統計,把出現次數最多的那個陣列元素值打印出來。如果有兩個元素值出現的次數相同,即並列第一,那麼只打印比較小的那個值。
  輸入格式:第一行是一個整數N,N £ 20;接下來有N行,每一行表示一個整數,並且按照從小到大的順序排列。
  輸出格式:輸出只有一行,即出現次數最多的那個元素值。
輸入輸出樣例
樣例輸入
5
100
150
150
200
250
樣例輸出
150
題目描述

 

先上程式碼:

 1 #include <stdio.h>
 2 using namespace std;
 3 
 4 int main(void)
 5 {
 6     int n;
 7     int num[20+1];
 8     scanf("%d",&n);
 9     if (n<=0) 
10         return 0;
11 
12     for (int i=0 ; i<n ; i ++)
13     {
14         scanf("%d",&num[i]);
15     } 
16     
17     int
max=0 ,tmp=0,res=num[0];//當n=1或n=2時,均返回第一個數 18 for (int i=0; i<n-1; i++) 19 { 20 if (num[i] == num[i+1]) 21 { 22 tmp ++; 23 } 24 else 25 { 26 if (tmp > max) 27 { 28 max = tmp; 29 res = num[i];
30 } 31 tmp = 0; 32 } 33 } 34 35 if (tmp>max)//最後一個數出現最多 36 printf("%d\n",num[n-1]); 37 else 38 printf("%d\n",res); 39 40 return 0; 41 }
C++解法

 

解題思路:

1.n<=0時返回0

2.當n=1或n=2時,返回第一個數

3.遍歷統計出現最多的數時,最後一個數的判斷需要在迴圈外再做判斷