找水王续

一 题目:

随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗。

二 设计思路:

分别将三个连续的ID存到三个计数器counter[0],counter[1],counter[2]中,再检测第四个数,如果与前面三个数不同,每个counter都减一,否则相同的counter加一。一直检测到最后一个id。

三 程序代码:

//2016  5 26      二十划生
//找水王续
#include<iostream>
using namespace std;
int main()
{
    int length;
    int Idnum[3]={0,0,0};
    int ID[3]={0,0,0};      
    cout<<"请输入帖子的数量:"<<endl;
    cin>>length;
    int * curId=new int [length];
     cout<<"请依次输入各个ID"<<endl;
    for(int j=0;j<length;j++)
    {
        cin>>curId[j];
    }
    for(int i=0;i<length;i++)
    {
        if(Idnum[0]==0 && curId[i]!=ID[1] && curId[i]!=ID[2])
        {
            Idnum[0]=1;
            ID[0]=curId[i];
        }
        else if(Idnum[1]==0 && curId[i]!=ID[0] && curId[i]!=ID[2])
        {
            Idnum[1]=1;
            ID[1]=curId[i];
        }
        else if(Idnum[2]==0 && curId[i]!=ID[0] && curId[i]!=ID[1])
        {
            Idnum[2]=1;
            ID[2]=curId[i];
        }
        else if(curId[i]!=ID[0] && curId[i]!=ID[1] && curId[i]!=ID[2])
        {
            Idnum[0]--;
            Idnum[1]--;
            Idnum[2]--;
        }
        else if(curId[i]==ID[0])
        {
            Idnum[0]++;
        }
        else if(curId[i]==ID[1])
        {
            Idnum[1]++;
        }
        else if(curId[i]==ID[2])
        {
            Idnum[2]++;
        }       
    }
    cout<<"三个小水王分别是:";
    cout<<ID[0]<<" "<<ID[1]<<" "<<ID[2]<<" "<<endl;
    return 0;
}

四 运行结果:
找水王续

五 心得体会:

根据上次的实验思路,用消除的方法实现代码。