课堂练习-找水王

课堂练习-找水王
•三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
要求:
•如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
思路:
题目可以简化为在一维数组中找ID超过一半的ID,例如array[]={123,456,123,452,123};中“123”就为所求水王。要求能够快速找到水王,也就意味着能在时间和空间上具有一定的优化。所以可以采用消除法来求得所需水王。
消除法:首先使用 a,b 来分别记录ID 出现的数量和ID名.
1.在遍历数组的比较array[i]和array[i-1]即比较相邻项,如果两项不等则a-1,相等则a+1.
2.当访问array[i]且a=0时,a+1且b=ID.
3.遍历完数组时b就为所求ID.
代码:
/**
*@Mr.缪 
*缪金敏 
*20132984 
**/
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int number=0; //用于记入ID数量
    string array[]={"wang123","xiaomin","dkm","wang123","wang123","dkm","wang123"};  //现有的帖子名单列表
    string ID=array[0]; //用于记入ID 
    for(int i=0;i<sizeof(array)/sizeof(array[0]);i++){
        if(number==0)
        {
            ID=array[i];
            number++;
        }else
        {
            if(ID==array[i]){
                number++;
            }
            else{
                number--;
            }
        }
    } 
    if(number==0)//判断是否有水王 
    {
        cout<<"无水王!"; 
    }
    else{
        cout<<"水王为:"<<ID;
        cout<<endl;
    }
    return 0;
} 

实验截图:

个人总结:

在这次的作业中我一共出现2个问题,在使用循环时计算数组长度使用了length方法,但C/C++并没有该方法,所以我最后用了sizeof方法,在使用ID变量时,因为我最开始是使用NULL给ID 初始化的所以在后来的ID赋值中便出现了问题,最后我把ID初始化为数组的第一个字符串。

posted @ 2016-05-19 15:15  Mr.缪  阅读(157)  评论(0编辑  收藏  举报