zoukankan      html  css  js  c++  java
  • 课堂练习——寻找水王续

    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.个人总结

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

  • 相关阅读:
    不务正业系列-浅谈《过气堡垒》,一个RTS玩家的视角
    [LeetCode] 54. Spiral Matrix
    [LeetCode] 40. Combination Sum II
    138. Copy List with Random Pointer
    310. Minimum Height Trees
    4. Median of Two Sorted Arrays
    153. Find Minimum in Rotated Sorted Array
    33. Search in Rotated Sorted Array
    35. Search Insert Position
    278. First Bad Version
  • 原文地址:https://www.cnblogs.com/Daddy/p/5520712.html
Copyright © 2011-2022 走看看