• 课堂练习——寻找水王续


    1.问题明细

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

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

      随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?

    2.设计思想

      解决思路与第一个基本相同,这次是找出发帖最多的三个人,就让这三个人组成一个队伍和其他人相比较,从而找出最多的。

      ①先设定三个String类型的变量,用以存放发帖最多的人名(初始值为空),并设定三个数字来表示这三个人名出现的次数;

      ②按照名单从第一位开始,按次序与三个变量进行比较,若与第一个相同,则第一个次数+1,二三同理,继续进行下一次循环;

      ③若与三个变量都不相同,则按次序判断三个数字是否为0,若第一个为0,则第一个次数变为1,且将此ID赋予给第一个变量,二三同理,继续进行下一次循环;

      ④若②③都不成立,则三个数字都-1,继续进行下一次循环。

      ⑤循环结束,三个变量存储的人名就是发帖最多的三个人,并进行输出;

    3.源代码

     1 import java.util.*;
     2 
     3 public class WaterKing2 
     4 {
     5     public static void main(String args[])
     6     {
     7         @SuppressWarnings("resource")
     8         Scanner in = new Scanner(System.in);
     9         System.out.print("请输入论坛帖子名单人数:");
    10         int number = in.nextInt();
    11         String ID[] = new String [number];
    12         System.out.println("请按顺序输入帖子名单: ");
    13         for(int i = 0;i<number;i++)
    14         {
    15             ID[i] = in.next();
    16         }
    17         
    18         String maxOne = "",maxTwo = "",maxThree = "";
    19         int timeOne = 0,timeTwo = 0,timeThree = 0;
    20         
    21         for(int i = 0;i<number;i++)
    22         {
    23             if(maxOne == ID[i])
    24             {
    25                 timeOne++;
    26             }
    27             else if(maxTwo == ID[i])
    28             {
    29                 timeTwo++;
    30             }
    31             else if(maxThree == ID[i])
    32             {
    33                 timeThree++;
    34             }
    35             else if(timeOne == 0)
    36             {
    37                 maxOne = ID[i];
    38                 timeOne = 1;
    39             }
    40             else if(timeTwo == 0)
    41             {
    42                 maxTwo = ID[i];
    43                 timeTwo = 1;
    44             }
    45             else if(timeThree == 0)
    46             {
    47                 maxThree = ID[i];
    48                 timeThree = 1;
    49             }
    50             else
    51             {
    52                 timeOne--;
    53                 timeTwo--;
    54                 timeThree--;
    55             }
    56         }
    57         
    58         System.out.println("发帖最多的3个ID为:"+maxOne+","+maxTwo+"和"+maxThree);
    59     }
    60 }

    4.结果截图

    5.个人总结

      这次作业是上一次的续,可以发现两者的解决办法存在相近性,都是找出存在次数最多的人。这就要求我们要学会借鉴之前学习到的方法,解决办法有些都是融会贯通的,需要我们不要仅仅是完成每次作业,而是要去从分把握住这次锻炼的机会,不仅锻炼自己的发散思维能力,还有就是记忆能力,要将原来的方法熟练掌握并应用,这才能使我们的水平得以提高。

  • 相关阅读:
    Bundle类
    intent.putExtra()方法参数详解
    6级技巧(一)
    6级核心词汇
    安卓应用运营知识:VersionCode和VersionName
    关于HTML、XHTML、CSS、XML的区别
    SQL记录-Linux CentOS配置ORACLE 12c
    Spark记录-Scala多线程
    Spark记录-Scala异常与处理
    Spark记录-Scala类和对象
  • 原文地址:https://www.cnblogs.com/Daddy/p/5520712.html
Copyright © 2020-2023  润新知