zoukankan      html  css  js  c++  java
  • 课堂练习-找水王

    课堂练习-找水王
    •三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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初始化为数组的第一个字符串。

  • 相关阅读:
    201141 live the lie until the lie becomes your life
    my php & mysql FAQ
    suger日料财务
    python 应用thrift thrift的监控fb303
    cherryPy学习
    my linux FAQ
    Javascript无阻塞加载方法
    设计模式学习笔记之组合模式模式
    【转】cookie
    C# 多线程
  • 原文地址:https://www.cnblogs.com/miaojinmin799/p/5508791.html
Copyright © 2011-2022 走看看