• 课堂练习——寻找水王


    1.问题明细

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

      如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

    2.设计思想

      ①从名单的第一位开始查找,假设第一位是水王,设定水王存在次数为1;

      ②按照名单,从“假设的水王”开始的下一个名字进行对比,若相同,则存在次数+1,若不存在,则存在次数-1;

      ③查看水王存在次数,若非0,则继续执行②,若为0,则当前不是水王,选定下一位为“假设的水王”,执行第①步;

      ④当查找结束后,最终保留下来的假设的水王就是真正的水王。

    3.源代码

     1 public class WaterKing 
     2 {
     3     public static void main(String args[])
     4     {
     5         int N = 10;
     6         
     7         String ID[] = new String [N];
     8         ID[0]="Ben";
     9         ID[1]="Jerry";
    10         ID[2]="Ben";
    11         ID[3]="Dan";
    12         ID[4]="Ben";
    13         ID[5]="Ben";
    14         ID[6]="Dan";
    15         ID[7]="Ben";
    16         ID[8]="Ben";
    17         ID[9]="Tom";
    18         
    19         int number = 1 ,time = 0;
    20         String name = ID[time];
    21         
    22         for(int i = 1;i < N;i++)
    23         {
    24             if(name == ID[i])
    25             {
    26                 number++;
    27             }
    28             else
    29             {
    30                 number--;
    31                 if(number == 0)
    32                 {
    33                     time++;
    34                     name = ID[time];
    35                     i = time;
    36                     number = 1;
    37                 }
    38             }
    39         }
    40         
    41         System.out.println("论坛中的水王是:"+name+"。");
    42     }
    43 }

    4.结果截图

    5.实验心得

      解决问题时,要抓住问题的重点。比如当前问题中的关键就是:该水王的发帖数目超过了总帖数的一半,由此可以判断,名单里一半以上都是水王的名字,所以,我们就需要从第一位开始找,遇到相同名字就+1,遇到不同名字就-1,除了水王,其他人一定都会变为0,如果是水王的话,这样执行到最后结果一定会为正值,由此可以判断是水王。如若没有注意到这一关键,解决问题也就无从谈起。

  • 相关阅读:
    poj 3928 树状数组
    poj 2528 线段树+离散化
    poj 3468 成段增减
    hdu 2795 线段树(纵向)
    2016年江西理工大学C语言程序设计竞赛(高级组)
    2016年江西理工大学C语言程序设计竞赛(初级组)
    2015年江西理工大学C语言程序设计竞赛(高级组)
    江西理工大学南昌校区2016年新生赛
    2014江西理工大学C语言程序竞赛高级组
    2014江西理工大学C语言程序竞赛初级组
  • 原文地址:https://www.cnblogs.com/Daddy/p/5509528.html
Copyright © 2020-2023  润新知