1036: 寻找整数序列的主元素


题目描述
已知一个整数序列A=(a0,a1,…an),如果其中有一个元素的出现次数超过n/2,就称该元素为A的主元素,否则就称整数序列没有主元素。例如A=(0,5,5,3,5,7,5,5),则5为主元素。A=(0,5,5,3,5,1,5,7),则A中没有主元素。要求编写程序实现寻找给定整数序列的主元素,如果找到,则输出主元素。如果没有找到,则输出-1。
输入
第一行为整数序列的个数n
第二行为一个整数序列。
输出
如果找到主元素,输出主元素的值,否则输出-1。
样例输入
复制
8
0 5 5 3 5 7 5 5
样例输出
5

#include<iostream>
using namespace std;
 
int juage(int data[],int n)
{
    int i,x;
    int count;
    count=0;
    i=0;
    x=data[i];
    while(i<=n)
    {
        if(data[i]==x)
            count++;
        else
		{
			if(count>0)
            count--;
			else        
            x=data[i+1];
		}
        i++;
    }
for(i=0;i<n;i++)
	{
		if(data[i]==x)
			count++;
	}
	if(count>n/2)
		return x;
	else
		return -1;
}
 
int main()
{
    int a[100];
    int n,i;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
    cout<<juage(a,n);
    return 0;
}

代码简单分析:
本题是某年考研数据结构最后一题,定义一个数组记录出现的每个元素,当一个遇到不同元素时数值减一,当遇到相同元素时数值加一。最后,当数组中的某个值大于0时再对这个值进行判断。
此代码是某论坛公布的答案,按照评分标准应得满分。
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐