1. 程式人生 > >找出陣列中出現次數最多的那個數——主元素問題

找出陣列中出現次數最多的那個數——主元素問題

 方法一:以空間換時間,可以定義一個計數陣列int count[100],用來對陣列中數字出現的次數進行計數(只能針對陣列中數字的範圍1~1000),count陣列中最大的元素對應的下標,即為出現次數最多的那個數。程式碼如下:

#include <iostream>
using namespace std;
 
int main()
{
	int n;
	cin >> n;
	int *p = new int[n];
 
	for(int m=0 ;m < n ; m++)
	{
		cin >> p[m];							//連續輸入n個數
	}
 
	int * count = new int[1001];                // 計數陣列,每個元素的預設值為0	

	for(int m=0 ;m < 1000 ; m++)
	{
		count[m]=0;							
	}
 
 
    for(int i = 0; i < n; i++)
    {
        count[p[i]]++;                        // 對應的計數值加1       出現問題p[i]最大為p[5]
    }
 
    int maxCount = count[0];				 // 初始化最大數值
    int maxNumber = 0;
 
    for(int i = 1; i < 1000; i++)              // 找出出現最多次的那個數字							
    {
        if(count[i] > maxCount)
            maxCount = count[i];
    }
 
    for(int i = 0; i < 1000; i++)              // 找出最多出現的次數
    {
        if(count[i] == maxCount)
            maxNumber = i;
    }
 
	cout << maxNumber;//<< " " << maxCount ;
	cout << endl ;
 
	return 0;
}
#include<iostream>
#include<stdio.h>
using namespace std;

int maxa(int a[],int n)
{
	int num,max=0;int maxx;
	int *temp=new int[1000];

	 for(int i = 0;i<1000;i++)
        temp[i] = 0;


	for(int j=0; j<n ;j++)       
	{ 
	  num = a[j];                        //num數值需要小於temp陣列的最大容量              
	  temp[num]++;                       //輸入的數字相對應temp陣列中的下標項,例如a[3]=80,則temp[80]++,temp[80]=1;
	}

	for(int t=0; t<1000 ;t++)
	{
	   if( temp[t] > max )
	   { 
		 max = temp[t] ;
		 maxx=t;
	   }
	}

	return maxx;
}


int main()
{
	int n;
	cin >> n;
	int a[20];

	for(int i=0;i<n;i++)                                  
	{
	    cin >> a[i];
 	}
    
	int num=maxa( a , n );
	cout << num << endl;

	return 0;
}

無限制的輸入:

#include<iostream>
using namespace std;
int main()
{
    int n,a[20],i,j,flag=0,max;
    int b[20]={0};
    cin >> n;
    for(i=0;i<n;i++)
        cin >> a[i];
    for(i=0;i<n-1;i++)
      for(j=i+1;j<n;j++)
       if(a[i]==a[j])
          b[i]++;
    for(i=0;i<n;i++)
       if(b[i]!=0)
       {
            flag=1;
            break;
        }
    if(flag==0)
    {
        cout << a[0];
        return 1;
    }
    max=b[0];
    for(i=1;i<n;i++)
		if(b[i]>max)
			 max=b[i];
    for(i=0;i<n;i++)
		if(max==b[i])
			cout << a[i] <<endl;

    return 0;
 
#include<iostream>
#include<stdio.h>
using namespace std;


int maxa(int a[],int n)
{
	int k,maxk=0,max=a[0];//maxk記錄最大出現次數,max記錄最大出現次數的值
	for(int i=0;i<n;i++)//遍歷陣列a中的元素,對當前元素a[i],讓它與它之前的每個元素相比較,計算 出現的次數k
	{
		k=0;
		for(int j=0;j<i;j++)
		{
			if(a[j]==a[i])
			{ 
				k++;
				if(k>maxk)
				{
					maxk=k;max=a[j];
				}
			}
		}
	}
	return max;
}



int main()
{
	int n;
	cin >> n;
	int a[20];

	for(int i=0;i<n;i++)                                  
	{
	    cin >> a[i];
 	}
    
	int num=maxa( a , n );
	cout << num << endl;

	return 0;
}