找水王
Posted GloryYT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找水王相关的知识,希望对你有一定的参考价值。
一、设计思路
(1)输入发帖ID记录表
(2)从第一个ID开始,与后续的发帖ID进行比较,若相同计数器则加一,否则减一。若计数器的数值被减为零,则重新选取当前ID开始记录比较。
(3)输出结果
二、源代码
#include<iostream>
using namespace std;
int FindWaterK(int IDNumber[],int m,int &waterking)
{
int c=0,c1=0; //计数
for(int i=0;i<m;i++)
{
if(c==0) //计数等于0
{
waterking=IDNumber[i]; //当前的ID为水王
c++; //计数加1
c1=0;
c1++;
}
else //若计数不等于0
{
if(waterking==IDNumber[i]) //当前ID等于水王
{
c++; //计数加1
c1++;
}
else
c--; //计数减1
}
}
return c1;
}
int main(){
int IDNumber[100]; //存放帖子ID
int n,waterking,num; //帖子数量,水王,相同帖子数目
cout<<"请输入帖子数量:"<<endl;
cin>>n;
cout<<"请输入帖子ID:"<<endl;
for(int i=0;i<n;i++)
{
cin>>IDNumber[i];
}
num=FindWaterK(IDNumber,n,waterking);
if(num>(n/2))
cout<<"水王是:"<<waterking<<endl;
else
cout<<"没有水王!!!"<<endl;
}
三、实验截图
四、个人总结
一开始的对题目的理解不是很透彻,在老师课堂上稍加提示之后了解了改题目的大致意思,按照一般思想就是每个遍历一遍,但是时间复杂度会很大,肯定有更加的简单方法,思索之后,可以将相邻的两个数字进行比较,相同的话保留,不相同则清除一位,照着这种想法进行下去,慢慢有了答案。
以上是关于找水王的主要内容,如果未能解决你的问题,请参考以下文章