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

    一、题目要求

          现有一个灌水论坛,信息学院的学生都喜欢在上面交流灌水。传说在论坛上有一个“水王”,它不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目已超过了帖子数目的一半。

          如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者ID在其中,请设计算法快速找到这个传说中的“水王”。

    二、设计思路

         本题要求时间复杂度是o(n),我们可以设置一个计数器flag,和一个变量shuiwang存放当前的ID,当flag为0时,将arry[i]赋给shuiwang,否则,比较i和i+1,相等flag+1,不等flag-1。

    三、源代码

     1 #include "stdio.h"
     2 #define N 1000
     3  int main()
     4  {
     5      int arry[N],shuiwang,flag,num,i;
     6      printf("请输入ID的个数:");
     7      scanf("%d",&num);
     8      printf("请输入ID:
    ");
     9      for(i=0;i<num;i++)
    10      {
    11          scanf("%d",&arry[i]);
    12      }
    13      for(i=flag=0;i<num;i++)
    14      {
    15          if(flag==0)
    16          {
    17              shuiwang=arry[i],flag=1;
    18          }
    19          else
    20          {
    21              if(shuiwang==arry[i])
    22              {
    23                  flag++;
    24              }
    25              else
    26              {
    27                  flag--;
    28              }
    29          }
    30      }
    31      printf("这个“水王”的ID就是:");
    32      printf("%d
    ",shuiwang);
    33      return 0;
    34  }
    View Code

    四、结果截图

    五、实验心得

          课堂上,老师让我们先从简单的方法开始,先排序中间的就是水王,而后,加大难度,我觉得这种思维正是我们在编程过程中应该具备的,先实现基本功能,再优化代码。然后说说这道题目,开始绞尽脑汁都没有想到,后来老师说可以采用“消消”的方法,恍然大悟...再实现时却不是那么回事,我发现面对不同的情况消得对象不同,比如“1,1,1,1,2,2,2”和“1,2,1,2,1,2,1”就不同,后来又跟小伙伴商量,探讨,查资料,才找到了分情况的办法,锻炼了我们的思维能力。

  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/yuanyajiao/p/4448666.html
Copyright © 2011-2022 走看看