找出数组中出现次数最多的那个数——主元素问题

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

猜你喜欢

转载自blog.csdn.net/weixin_40539125/article/details/82880108