首页 > 其他 > 详细

寻找发帖水王扩展问题

时间:2014-04-27 04:03:51      阅读:583      评论:0      收藏:0      [点我收藏+]

编程之美一书中寻找发帖“水王“的扩展问题描述如下:

统计结果表明,有3个发帖很多的ID,它们的发帖数码都超过了帖子总数目的N的1/4。你能从发帖ID列表中快速找出它们的ID吗?

 

参考书中”超级水王“的求解方案,我们每次删除4个不同的ID(不管是否包含题设中的3个ID),那么在剩下的ID列表中,题设中的3个ID各自出现的次数依旧超过总ID数的1/4,我们通过代码demo.cpp来找出题设中的3个ID:

bubuko.com,布布扣
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int inputNum,idValue[3],idCounts[3] = {0,0,0};
    vector<int> intVec;
    
    cout << "Please input some intergers and enter ctrl+d to end input:" << endl;
    while(cin >> inputNum)
        intVec.push_back(inputNum);
    
    for(vector<int>::size_type index = 0; index != intVec.size(); index++)
    {    
        
        if(idCounts[0] && idValue[0] == intVec[index])
        {    
            idCounts[0]++;
        }    
        else if(idCounts[1] && idValue[1] == intVec[index])
        {
            idCounts[1]++;
        }
        else if(idCounts[2] && idValue[2] == intVec[index])
        {                
            idCounts[2]++;    
        }
        else if(0 == idCounts[0])
        {
            idValue[0] = intVec[index];
            idCounts[0]++;
        }        
        else if(0 == idCounts[1])
        {
            idValue[1] = intVec[index];
            idCounts[1]++;
        }    
        else if(0 == idCounts[2])
        {
            idValue[2] = intVec[index];
            idCounts[2]++;
        }                    
        else                              //与当前3个id都不相等,则从列表中删除这4个元素
        {
            idCounts[0]--;
            idCounts[1]--;
            idCounts[2]--;
        }        
    }
    
    cout << "the result is: " << idValue[0] << " " << idValue[1] << " " << idValue[2] << endl;
    return 0;
}
bubuko.com,布布扣

在该程序中,数组idValue[3]用来存放题设中要求的3个ID的值,数组idCounts[3]用来存放当前情况下,idValue[3]中对应ID的个数,初始化均为为0。

在for循环中,首先判断当前处理的ID值是否与idValue[3]中某个元素相等,如果都不相等,那么就考虑下是否是由于idCounts[3]中某个元素不含ID导致的,如果数组idCounts[3]里的元素均大于0,那么这时刚好满足删除4个不同ID的条件,将idCounts[3]里的元素各自减一即可。最后剩下来的元素一定都是由题设要求的3个ID所组成的。

 

测试文件test.txt内容:

bubuko.com,布布扣
1 3 1 8 2   3 8 1 4 3   1 3 8 6 3   2 8 8 1 3   10 1 8
bubuko.com,布布扣

测试结果:

bubuko.com,布布扣
$ ./demo < test.txt
$ the result is: 1   3   8
bubuko.com,布布扣

 

 

 

寻找发帖水王扩展问题,布布扣,bubuko.com

寻找发帖水王扩展问题

原文:http://www.cnblogs.com/bettercoder/p/3691965.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!