配列の主な要素(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次元配列に格納されていると仮定して、主要な要素を見つけるために可能な限り効率的なアルゴリズムを設計してください。メイン要素がある場合は要素が出力され、ない場合は-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;
}