您的位置:首页 > 理论基础

2013年计算机联考真题——确定主元

2017-08-11 19:33 351 查看


思路:

首先把主元 确定为A[0],并计数cnt=1。之后从下标为1开始遍历数组,

1.如果A[i] == A[0],cnt++

2.如果不等,则如果cnt>0,cnt–,如果cnt<0,主元设定为A[i],cnt=1。

遍历结束后,再遍历一遍,确定主元的出现的次数,大于n/2,返回主元,否则返回-1

代码如下:

#include <iostream>
using namespace std;

int Majority(int* A, int n)
{
int majority = A[0];
int cnt = 1;
for(int i = 1 ; i < n ; i++){
if(A[i] == majority){
cnt++;
}else{
if(cnt > 0){
cnt--;
}else{
majority = A[i];
cnt = 1;
}
}
}
cnt = 0;
for(int i = 0 ; i < n ; i++){
if(A[i] == majority){
cnt++;
}
}
if(cnt <= n/2){
majority = -1;
}
return majority;
}

void Print(int* A,int n)
{
for(int i = 0 ; i < n ; i++){
cout<<A[i]<<" ";
}
}

int main()
{
int A[8] = {0,5,5,3,5,7,5,5};
int B[8] = {0,5,5,3,5,1,5,7};
int majority = Majority(A,8);
cout<<"数组A为:"<<endl;
Print(A,8);
if(majority == -1){
cout<<"数组A没有主元"<<endl;
}else{
cout<<"数组A主元为:"<<majority<<endl;
}

cout<<"数组B为:"<<endl;
Print(B,8);
majority = Majority(B,8);
if(majority == -1){
cout<<"数组B没有主元"<<endl;
}else{
cout<<"数组B主元为:"<<majority<<endl;
}

return 0;
}


截图为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐