統計陣列中出現次數最多的元素並輸出
阿新 • • 發佈:2019-01-03
實驗過程中遇到一個實際問題:需要統計出10次計數的值中出現最多的一個數,比如輸入34 35 35 35 34 35 35 35 34 33 十個數,要求最終輸出35.如果出現兩個數同樣多,則輸出兩個元素中較小的那一個(也可以是較大的那一個,但是必須確定是其中一種)。
程式碼中採用5個元素以簡化:
這個是在百度基礎上修改而成的演算法,效率較低,但是滿足我在實驗中的需求,因此貼出來以備參考。#include <stdio.h> int main() { int n = 5; int a[5] ={31,31,32,32,32}; //most :出現最多的數 int i,j,most,count[2] = {1,1}; //初始化為第一個數 most = a[0]; for (i = 0;i < n;i++) { for(j = i+1;j < n;j++) { if (a[i] == a[j]) { count[0]++; } } if(count[0] > count[1]) { count[1] = count[0]; most = a[i]; } else if (count[0] == count[1]) { if(most > a[i]) { most = a[i]; } } count[0] = 1; } printf("%d\n",most ); return 0; }
實驗中的兩層迴圈類似冒泡法:
- 首先從第一個元素a[0]開始,讓他和a[1]~a[4]相比,如果相同,則計數加一,即count[0]++,每迴圈一輪內迴圈,可以統計一個元素的個數;
- 如果當前元素個數比上一個元素的個數多,則重新整理寄存的個數為當前個數,重新整理儲存的元素為當前元素;
- 如果當前元素個數和上一個元素的個數相同,則比較兩個元素大小,儲存較小的一個元素;
- 迴圈結束輸出儲存的元素即可,即程式碼中的most。