戴璞微的博客

简单点!做事的动机简单点

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

这里写图片描述


思路:
首先把主元 确定为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;
}

截图为:
这里写图片描述

阅读更多
版权声明:本文为博主原创文章,若需转载,请注明http://blog.csdn.net/qq_30091945 https://blog.csdn.net/qq_30091945/article/details/77102462
个人分类: 数据结构
所属专栏: 数据结构与算法
想对作者说点什么? 我来说一句

2016年计算机统考408真题及答案

2017年09月23日 3.13MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭