zoukankan      html  css  js  c++  java
  • 找水王02

      题目:三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?(参考核心代码) 随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?

      思路:这次如果还是按照我上一个找水王的思路来的话,根本想不出来,后来根据老师让同学讲的上一个题的另外的思路,我想了想,可以设三个返回值,并且需要用到数组,num的3个元素分别对应当前遍历过的3个ID出现的个数。如果遍历中有某个ID不同于这3个当前ID,我们就判断当前3个ID是否有某个的num为0,如果有,那这个新遍历的ID就取而代之,并赋1 为它的遍历数(即num减1),如果当前3个ID的num皆不为0,则3个ID的num皆减去1,这也就是解决本文题的关键了。由于非水王ID不满总帖数的1/4,所以所遍历ID与当前3个ID不同时,就一同抵消,最终留下来的3个当 前ID总会是3个超过1/4的水王ID。

    代码:

     1 package zxf;
     2 import java.util.Scanner;
     3 public class main {
     4     public static void main(String[] args){
     5         Scanner in=new Scanner(System.in);
     6         int N;
     7         System.out.println("请输入帖子的总数:");
     8         N=in.nextInt();
     9         String list[]=new String[N];
    10         int i;
    11         System.out.println("请输入ID:");
    12         for(i=0;i<N;i++)
    13         {
    14             list[i]=in.next();
    15         }
    16         int num[]=new int[3];//利用J为每个水王的便利进行标记
    17         num[0]=num[1]=num[2]=0;
    18         String ID[]=new String[3];//设定单个水王ID
    19         for(i=0;i<N-1;i++)
    20         {
    21             if(num[0]==0)//当计数器为0时,重新赋予水王ID
    22             {
    23                 num[0]++;
    24                 ID[0]=list[i];
    25             }
    26             else if(num[1]==0)
    27             {
    28                 num[1]++;
    29                 ID[1]=list[i];
    30             }
    31             else if(num[2]==0)
    32             {
    33                 num[2]++;
    34                 ID[2]=list[i];
    35             }
    36             
    37             else if(list[i].equals(ID[0]))//相同ID时计数器增加
    38             {
    39                 num[0]++;
    40             }
    41             else if(list[i].equals(ID[1]))
    42             {
    43                 num[1]++;
    44             }
    45             else if(list[i].equals(ID[2]))
    46             {
    47                 num[2]++;
    48             }
    49             
    50             else//不同ID时因两两相消计数器减小
    51             {
    52                 num[0]--;
    53                 num[1]--;
    54                 num[2]--;
    55             }
    56         }
    57         System.out.println("三个水王分别是是:"+ID[0]+"   "+ID[1]+"   "+ID[2]);
    58         in.close();
    59      }
    60 }

      个人总结:因为上次自己的程序不是这个思路,所以写起来还是有一定难度的。但是一旦把思路想好了,程序写起来就不是很困难了。

  • 相关阅读:
    脱壳实践之手动构造输入表
    脱壳实践之寻找OEP——堆栈平衡法
    脱壳实践之寻找OEP——两次内存断点法
    PE文件格式详解(八)
    PE文件格式详解(七)
    PE文件格式详解(六)
    Eclipse 安装 Maven 插件(图文解说)
    在线图片压缩后以ImageIO 流的形式 设置大小显示指定页面
    Android-studio开发 快捷键
    简明 Git 命令速查表(中文版)
  • 原文地址:https://www.cnblogs.com/quite-love/p/5535731.html
Copyright © 2011-2022 走看看