课堂练习-找水王扩展

在上一次练习的基础上,大水王消失了,出现了3个小水王,且每个水王发帖的数量都超过1/4.找出3水王

思路:

上次作业的找水王是通过设两个变量使用消除法来寻找出大水王,以此类推,这一次我们可以通过六个变量来推导出三水王,每两个代表一个水王,其中一个表示ID,另一个用来使用消除法抵消次数,因为每个水王发帖量都超过1/4,所以一遍运行下来,三水王的ID出现次数都不会被抵消。

 对应代码:

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string tieba[]={"wang","xiaozi","xiaozi","wang","hz","hc","hz","asdf","wang","xiaozi","hz","hz","sdf","wang","hz","xiaozi"};
    int court[3]={0};  //用于计数 
    int ID[3]={0,1,2};         //记入ID 
    /*
    使用消去法,读入一个ID,与ID数组相比较。
    1、ID数组中含有对应ID则相应court+1;
    2、如果对应数组ID都没有与之对应,那么查看是否有ID对应court==0,如果有则替换对应ID;
    3、条件一和条件二都没有满足则,court数组都减1;
    */
    for(int i=0;i<sizeof(tieba)/sizeof(tieba[0]);i++)
    {
        if(tieba[ID[0]]==tieba[i])
        {
            court[0]++;
        }else if(tieba[ID[1]]==tieba[i])
        {
            court[1]++;
        }else if(tieba[ID[2]]==tieba[i])
        {
            court[2]++;
        }else if(court[0]==0)
        {
            ID[0]=i;
        }else if(court[1]==0)
        {
            ID[1]=i;
        }else if(court[2]==0)
        {
            ID[2]=i;
        }else
        {
            court[0]--;
            court[1]--;
            court[2]--;
        }
    }
    for(int i=0;i<3;i++)
    {
        cout<<""<<i+1<<" 个水王是:"<<tieba[ID[i]]<<endl; 
    }
    return 0;
} 

结果:

原文地址:https://www.cnblogs.com/miaojinmin799/p/5532928.html