找出陣列中出現次數最多的那個數——主元素問題
阿新 • • 發佈:2019-02-01
方法一:以空間換時間,可以定義一個計數陣列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;
}