1. 程式人生 > >統計陣列中出現次數最多的元素並輸出

統計陣列中出現次數最多的元素並輸出

實驗過程中遇到一個實際問題:需要統計出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;
}
這個是在百度基礎上修改而成的演算法,效率較低,但是滿足我在實驗中的需求,因此貼出來以備參考。

實驗中的兩層迴圈類似冒泡法:

  1. 首先從第一個元素a[0]開始,讓他和a[1]~a[4]相比,如果相同,則計數加一,即count[0]++,每迴圈一輪內迴圈,可以統計一個元素的個數;
  2. 如果當前元素個數比上一個元素的個數多,則重新整理寄存的個數為當前個數,重新整理儲存的元素為當前元素;
  3. 如果當前元素個數和上一個元素的個數相同,則比較兩個元素大小,儲存較小的一個元素;
  4. 迴圈結束輸出儲存的元素即可,即程式碼中的most。