zoukankan      html  css  js  c++  java
  • 寻找“水王”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

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

  • 相关阅读:
    UVa 1451 Average (斜率优化)
    POJ 1160 Post Office (四边形不等式优化DP)
    HDU 3507 Print Article (斜率DP)
    LightOJ 1427 Substring Frequency (II) (AC自动机)
    UVa 10245 The Closest Pair Problem (分治)
    POJ 1741 Tree (树分治)
    HDU 3487 Play with Chain (Splay)
    POJ 2828 Buy Tickets (线段树)
    HDU 3723 Delta Wave (高精度+calelan数)
    UVa 1625 Color Length (DP)
  • 原文地址:https://www.cnblogs.com/linanil/p/5538503.html
Copyright © 2011-2022 走看看