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; }
截图为:
相关文章推荐
- 2011年计算机联考真题——寻找2个序列的中位数
- 2014年计算机联考真题——带权路径长度之和
- 2010年计算机联考真题——一维数组循环左移
- 2016年计算机联考真题——寻求最大子集和的差
- 2013年第四届蓝桥杯C/C++B组真题训练(一,2017.3.3)
- 2010年浙江大学计算机及软件工程研究生机试真题之三
- 2009年北京航空航天大学计算机研究生机试真题,迭代求立方根
- 题目1118:数制转换(2008年北京大学图形实验室计算机研究生机试真题)
- 服务器用U盘虚拟光驱装系统,有做RAID5,加载RAID驱动成功后,安装到最后会报“windows无法确定此计算机是否包含有效系统卷”错误
- 2005年浙江大学计算机及软件工程研究生机试真题 -九度题目1013:开门人和关门人
- 如何确定计算机运行的是 32 位还是 64 位版本的Windows 操作系统
- win7堡垒机远程windowsserver2008出现“由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后”
- 九度OJ 1107 搬水果 -- 哈夫曼树 2011年吉林大学计算机研究生机试真题
- 如何确定计算机运行的是 32 位还是 64 位版本的 Windows 操作系统
- 05年9月等级考试二级C语言考前上机密卷_计算机等级真题
- 【Access】2013年计算机等级考试二…
- 九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题
- Is It A Tree?,判断是否是一棵树。(题目来源:九度OJ 1481,2012年北京大学计算机研究生机试真题)
- 计算机等级考试2008年9月二级C语言真题(附答案)
- 2006年内蒙古大学考研计算机真题__算法设计