【问题描述】这是一道2013年考研真题
已知一个整数序列A长度为N其中若存在a且a的个数大于N/2则称为A的主元素
例如3 5 5 3 5 7 5 5则为主元素 5
又如3 5 5 3 5 1 5 7则中没有主元素。
假设元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出的主元素。若存在主元素则输出该元素否则输出
【输入形式】
一个整数数组,以0作为结束输入
【输出形式】
主元素,若没有则输出-1
【样例输入】
3 5 5 3 5 7 5 5 0
【样例输出】
5
#include <iostream>
#include<vector>
#include <cstdio>
using namespace std;
int main()
{
int a;
vector<int>p;
while(cin>>a){
if(a==0) break;
p.push_back(a);
}
int i,j;
int v = p.size() / 2;
for(j = 0; j < p.size(); j++){
int icount = 0;
int m = p[j];
for(i = j; i < p.size(); i++){
if(p[i] == m){
icount += 1;
}
}
if(icount > v){
cout<<m;
return 0;
}
}
cout<<"-1";
return 0;
}
上面这个代码是正确的。
但是在写的过程中遇到一些问题,就是将int icount = 0写在for循环外面的时候,输出结果错误。
......
int icount = 0;
for(j = 0; j < p.size(); j++){
int m = p[j];
......
这样输出结果
这是为什么呢????
请多多指教!
解决了!!!
每一个数据计数都要从0开始。只有在里面的时候才能时时更新。
这个居然都能错------。