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

原创 2017年08月11日 19:33:02

这里写图片描述


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

相关文章推荐

栈的应用——表达式求值

概要表达式求值问题可以说是一个经典问题。具体思路就是首先把输入的中缀表达式转换为后缀表达式,然后再根据后缀表达式进行计算求值。中缀表达式转换为后缀表达式首先我们设定运算符在进栈前与进栈后的优先级: 首...

单链表

现在已经进入专业课复习,王道的数据结构复习指导的第一个数据结构虽然是顺序表,但是过于简单,就不想写了。现在复习到链表,首先单链表数其他链表的基础。所以首先把单链表所有基础操作全部写一遍。包括建表,插入...

2010年计算机联考真题——一维数组循环左移

前记从七月份决定开始考研,中间由于听报告,回家复习数学和政治但无论一些时间。自己准备报考山东大学计算机技术的专硕,幸好是数学是考数学二,专业课一直有一门数据结构,这位我的复习节省了很多时间,不想数学一...

2014年1月MBA联考英语真题答案及解析:阅读

mba中国网讯:Section II Reading Comprehension     Part A     Text 1     21、【答案】B A special tour   ...

2011年9月17日联考行测真题与答案解析

2011年9月17日联考行测真题与答案解析 (江西、河南、新疆、黑龙江、福建、甘肃、重庆、新疆、青海,及各省市政法干警考试) 第一部分  常识判断 根据题目要求,在四个选项中选出一个最恰...

2010年4月25日公务员考试(十二省联考)行测真题及参考答案

2010年4月25日公务员考试(十二省联考)行测真题及参考答案 (云南、湖南、山东、内蒙古、重庆、海南、宁夏、辽宁、广西、陕西、天津、西藏)(考试时间:120分钟) 第一部分数量关系 (共1...

2011年4月24日联考行测真题与答案解析

2011年4月24日联考行测真题与答案解析 (贵州、四川、福建、黑龙江、湖北、山西、重庆、辽宁、海南、 江西、天津、陕西、云南、广西、山东、湖南)十六省 第一部分 常识判断 (共20题,参考时...

2010年一月联考数学真题带答案

  • 2010年01月14日 15:14
  • 186KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2013年计算机联考真题——确定主元
举报原因:
原因补充:

(最多只允许输入30个字)