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

    一、题目及题目要求

    题目:三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

    二、设计思路:

    1、把帖子列表,抽象为一个一维数组arr[NUM],输入长度length为id总数,每个数组元素为一个id。

    2、再设置一个循环,按照顺序来依次两两比较,如果作者id相同则保留,如果作者id不同则消除。

    3、最后剩下id即为水王id

    三、源程序:

    #include<iostream>
    using namespace std;
    #define NUM 100
     int find(int arr[], int n)//找水王函数
     {
        int sw = 0; //
        int count=0;  //标记
        for(int i=0;i<n;i++)
        { 
            if(count == 0)//初始时,把数组第一个元素赋给sw
            { 
                sw = arr[i]; 
                count = 1; 
            } 
            else
            { 
                if(sw == arr[i]) //相等不消除
                    count ++; 
                else  
                    count --; 
            } 
        }
    
             return sw;
        }
    int main()
    {
    	  int length=0;
          while (length==NULL||length == 0)//如果数组长度为空或零则请重新输入
          {
            cout<<"请输入ID数量:";
            cin>>length;
           }
           int arr[NUM];
           cout<<"输入作者id(不为0):"<<endl;
    	   for(int i=0;i<=(length-1);i++)
    	   {
    		   cin>>arr[i];
    		   if(arr[i]==0)
    		   {
    			   cout<<"id不为0,请重新输入:";
    		   cin>>arr[i];
    		   }
    
    	   }
    
    	   int ID=find(arr,length);
    		cout<<"水军的ID是"<<ID<<endl;
    		return 0;
    }
    

    四、运行截图

    五、项目计划日志

    周活动总结表

    姓名:魏**                  日期2016.5.19

    日期   任务 听课  编写程序 阅读课本 准备考试     日总计

    周一

    100   30       130

    周三

        30       30

    周四

      100         100

    周总结

    100 100 60       260

    阶段时间和效率                                            周数(上一次周活动表的周数+1):

    不包括上一周在内的累计时间      

    总计

     100

     100

     60

     

     

     

     260

    平均

     100

     100

     60

     

     

     

     260

    最大

     100

     100

     60

     

     

     

     260

    最小

     100

     100

     60

     

     

     

     260

     以前各周的累计时间      

    总计

     100

     100

      60

     

     

     

     260

    平均

     100

    100

      60

     

     

     

     260

    最大

     100

    100

     60

     

     

     

     260

    最小

     100

    100

     60

     

     

     

     260

    六、时间记录表:

    学生       魏**                                           日期   2016年5月19日 

    教师        王**                                          课程        软件工程      

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

     5.16

     14:30

    16;20 

    10

     100

     上课

     

     5.16

     18:30

     19:00

     无

    30

    看书

     

     5.18

    22:00

    22:30

     无

    30

    看书

     

     5.19

    14:30

    16:30

    100

    编写程序

    作业

     

    七、个人总结

    这个题目,一开始没有思路,在老师的启发下一开始到的是遍历列表,统计每个id出现的次数。后来老师提到了遍历然后排序,中间项肯定是水王ID,可是时间复杂度为n*n,为了降低时间复杂度,老师提示用两两消除的思想,后来我们就想到了如何解决。一道题目有好多种解法,我们应当拓宽思路,多看一些算法书籍,多练习写程序,孰能生巧。

  • 相关阅读:
    libcurl进行HTTP GET获取JSON数据(转载)
    c/c++ 动态申请数组(转载)
    利用注册表写开机启动程序(转载)
    VC++使用IMAPI调用Outlook邮箱客户端和Foxmail邮箱客户端遇到的问题
    解决Duilib集成CEF浏览器在Win10无法向客户区拖拽文件
    解决往监控目录拖拽文件夹无法监控到的问题
    VC++ 实现修改文件创建、访问、修改时间属性(转载)
    Windows中的时间(SYSTEMTIME和FILETIME) (转载)
    ThinkPHP真正疑难问题笔记
    git版本控制管理实践-4
  • 原文地址:https://www.cnblogs.com/a1397240667/p/5509088.html
Copyright © 2011-2022 走看看