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

来源:互联网 发布:c语言初级程序 编辑:程序博客网 时间:2024/06/06 03:56

这里写图片描述


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

截图为:
这里写图片描述

阅读全文
0 0