数组主元素(2013考研题)
1.
【问题描述】
已知一个整数序列A长度为N其中若存在a且a的个数大于N/2则称为A的主元素
例如0 5 5 3 5 7 5 5 则为主元素 5
又如0 5 5 3 5 1 5 7则中没有主元素。
假设的元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出的主元素。若存在主元素则输出该元素否则输出-1。
【输入形式】
一个整数数组
【输出形式】
主元素
【样例输入】
0 5 5 3 5 7 5 5
【样例输出】
5
【样例说明】
长度为8,共有5个5。
#include <iostream>
#include<algorithm>
#include <cstdio>
using namespace std;
int main()
{
int i=0,n=0,j,x,y;
char a[100],ch;
do//ch=getchar() != EOF && ch != '\n'
{
ch=getchar();
if(ch!=' ')
{
a[i]=ch;
//cout<<i<<" "<<a[i]<<endl;
i++;
}
}while(ch!='\n'&&ch!=EOF);
n=i-1;
int b[n],c[n]={0},ma1,ma2,z;
for(j=0;j<n;j++)
{
b[j]=a[j]-'0';
}
for(x=0;x<n;x++)
{
for(y=x;y<n;y++)
{
if(b[x]==b[y])
c[x]++;
}
}
ma1=c[0],ma2=0;
for(j=0;j<n;j++)
{
if(c[j]>ma1)
{
ma1=c[j];
ma2=j;
}
}
//cout<<ma1<<" "<<b[ma2]<<endl;
z=n/2;
if(ma1>z)
cout<<b[ma2];
else
cout<<-1;
return 0;
}