方法一:以空间换时间,可以定义一个计数数组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>
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;
}