寻找“水王”02

1.设计思想

①存ID到一个数组

②当某水王出现次数0次时:如果新出现的和别的水王ID相同,别的水王出现次数+1;如果不是,那么它是新水王,记录并给它自己次数+1

③如果出现与某水王相同ID,某水王ID出现次数+1;如果出现全新ID,全部水王ID出现次数-1

2.代码实现

//2016-5-26 李娜
//寻找三个发帖数量超过了1/4的“水王”

#include <iostream>
#include <fstream>
#include <String>
#define N 50
using namespace std;

int main()
{
    int j;//循环用数
    int i=0;//有i个ID
    string id;//当前读取ID
    string a[N]={};//存ID

    ifstream infile("e:\sw.txt");

    if (!infile)
    {

        cout<<"文件打开出错!"<<endl;

    }

    while (getline(infile,id))//读取每行的ID
    {

        a[i]=id;
        i++;
    }
    /////////////////////////////////////////////
///////以上:将文件内容给a[i]///////////////////////
///////以下:算水王/////////////////////////////////
    ////////////////////////////////////////////

    int s[]={0,0,0};//分别给三个水王计数用

    string sw[]={"","",""};//存水王ID

    for(j=0;j<i;j++)
    {
        if (s[0]==0)//水王1出现0次
        {
            if (a[j]==sw[1])//如果又出现是第2个水王
            {
                s[1]++;//水王2出现次数+1
            }
            else if (a[j]==sw[2])//如果又出现是第3个水王
            {
                s[2]++;//水王3出现次数+1
            }
            else//这是新水王
            {
                sw[0]=a[j];//记录新水王
                s[0]++;//出现+1
            }
        }

        else if (s[1]==0)//水王2出现0次,以下代码同上含义
        {
            if (a[j]==sw[0])
            {
                s[0]++;
            }
            else if (a[j]==sw[2])
            {
                s[2]++;
            }
            else
            {
                sw[1]=a[j];
                s[1]++;
            }
        }

        else if (s[2]==0)//水王3出现0次,以下代码同上含义
        {
            if (a[j]==sw[0])
            {
                s[0]++;
            }
            else if (a[j]==sw[1])
            {
                s[1]++;
            }
            else
            {
                sw[2]=a[j];
                s[2]++;
            }
        }

        else//水王都有存数据了,有可能出现重复的数据,也有可能是新数据;所以重复了就次数+1,新的就次数都-1
        {
            if (sw[0]==a[i])
            {
                s[0]++;
            }
            else if (sw[1]==a[i])
            {
                s[1]++;
            }
            else if (sw[2]==a[i])
            {
                s[2]++;
            }
            else
                s[0]--,s[1]--,s[2]--;
        }
    }

    for (int k=0;k<3;k++)
    {
        cout<<sw[k]<<endl;
    }    
    
}

3.测试截图

4.个人总结

本来是用数组,一组一组比,但是出现两个结果:

一是全变成最后一个ID

二是全一样的ID

我发现那样会覆盖,所以不能那样比

原文地址:https://www.cnblogs.com/linanil/p/5538503.html