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

    一、题目

    •三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    •如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
    •随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
     
    二、设计思想
    原来问题的求解,是超过半数的水王,现在变成超出1/4,那么剩下的就不会超过1/4,由此可以分析,如果每次比较,去除其中不相同的三个数据,那么,跟去除找到其中超过1/2的ID数的解法是一样的,所以,我们可以设置一个数组来存储三个不相同的ID,然后从water列表中找出与这三个匹配的ID,如果匹配的话,那么计数标志signal[]+1,如果不匹配,所有ID的标志位-1,那么到最后剩下的肯定是数量最多的三个ID
    三、代码截图
     1 #include<iostream.h>
     2 void Data(int length,int a[])
     3 {
     4     cout<<"请输入符合条件的ID列表(其中三个ID的数量分别超过1/4,其他的ID少于1/4):"<<endl;
     5     for(int i=0;i<length;i++)
     6     {
     7         cin>>a[i];
     8     }
     9 }
    10 
    11 int main()
    12 {
    13     int length;
    14     int signal[3]={0,0,0};
    15     int ID[3]={-1,-1,-1};        //设置信号量
    16     cout<<"请输入帖子数量:";
    17     cin>>length;
    18     int * water=new int [length];
    19     Data(length,water);
    20     for(int i=0;i<length;i++)
    21     {
    22         /*先将ID列表初始化,找出三个不同的ID*/
    23         if(signal[0]==0 && water[i]!=ID[1] && water[i]!=ID[2])
    24         {
    25             signal[0]=1;
    26             ID[0]=water[i];
    27         }
    28         else if(signal[1]==0 && water[i]!=ID[0] && water[i]!=ID[2])
    29         {
    30             signal[1]=1;
    31             ID[1]=water[i];
    32         }
    33         else if(signal[2]==0 && water[i]!=ID[0] && water[i]!=ID[1])
    34         {
    35             signal[2]=1;
    36             ID[2]=water[i];
    37         }
    38         /*开始进行查找,不同标志single+1,相同标志-1*/
    39         else if(water[i]!=ID[0] && water[i]!=ID[1] && water[i]!=ID[2])
    40         {
    41             signal[0]--;
    42             signal[1]--;
    43             signal[2]--;
    44         }
    45         else if(water[i]==ID[0])
    46         {
    47             signal[0]++;
    48         }
    49         else if(water[i]==ID[1])
    50         {
    51             signal[1]++;
    52         }
    53         else if(water[i]==ID[2])
    54         {
    55             signal[2]++;
    56         }
    57         
    58     }
    59     cout<<"水王为:"<<ID[0]<<ID[1]<<ID[2]<<endl;
    60     return 0;
    61 }

     
  • 相关阅读:
    Spark:The Definitive Book第十四章笔记
    Spark:The Definitive Book第十三章笔记
    Spark:The Definitive Book第十二章笔记
    Spark:The Definitive Book第十一章笔记
    Spark:The Definitive Book第十章笔记
    Spark:The Definitive Book第九章笔记
    Spark:The Definitive Book第八章笔记
    Spark:The Definitive Book第七章笔记
    QRTest
    flutter笔记
  • 原文地址:https://www.cnblogs.com/xuqingtian/p/4520109.html
Copyright © 2011-2022 走看看