[藍橋杯]ALGO-90.演算法訓練_出現次數最多的整數
阿新 • • 發佈:2018-12-24
問題描述 編寫一個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數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 intC++解法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 }
解題思路:
1.n<=0時返回0
2.當n=1或n=2時,返回第一個數
3.遍歷統計出現最多的數時,最後一個數的判斷需要在迴圈外再做判斷