《 找水王》

问题描述:已知某个论坛的帖子汇总列表,要找出其中的水王(即发的帖子数超出了总帖子数的一半),求解水王的IP地址;

设计思想:故名思意,一个帖子对应着一个IP地址,只要设计相关的思路遍历一遍帖子汇总列表,即可找出水王的IP地址;

具体做法:(1)设计一个变量作为遍历过程中来判断是否变换IP地址的基准,而基准指的是如若此变量小于0,则再进行遍历下一个IP地址前,把当前的IP地址赋予另一个变量;

(2)这里所指的另一个变量指的是基IP地址,然而之前作为判断IP地址是否更换的变量是根据把当前的IP地址和基IP地址进行比对后决定的,如若相等,则让基准变量增加一,否则减一;

(3)然而都知道,我们是根据基准变量的取值大小来决定水王的IP地址的(水王的IP地址即是当基准变量最大时,所遍历到的IP地址)。

源代码:

//已知发表帖子列表,找出其中的水王(即发表的帖子数大于总贴的一半)
//李敏,May 16th,2015
#include <iostream>
using namespace std;

void main()
{
    int n,i,a[1000],t,p,q,m,l;
    cout<<"请输入共发表的帖子总数:"<<endl;
    cin>>n;
    cout<<"请依次输入各个帖子的IP地址"<<endl;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    t=0;
    q=a[0];
    p=0;
    for(i=1;i<n;i++)
    {
        if(a[i]==q)
        {
            t++;
            if(t>=p)
            {
                p=t;
                m=a[i];
            }
            q=a[i];
        }
        else
        {
            l=t--;
            if(l<0)
            {
                t=0;
                q=a[i];
            }
            else
            {
                t=l;
                q=a[i];
            }
        }

    }
    cout<<"找到的水王的IP地址为:"<<m<<endl;

}

实验结果截图:

编程总结:(1)说实话,第一次看问题的时候真心把题目的意思给理解错了,后来在老师的提醒后,理解了题目的意思,但还没有想出解决的方法;

(2)在听了同学的思路后,有点感觉了,但是感觉对于此设计还有些模糊;

(3)后来自己举了一些例子后,再根据课上同学的思路,发现了例子中存在的规律了,基本上再设计代码时已经没有问题了;

(4)在对代码进行设计中,虽然遇到了一些问题,但是再好好思考后还是解决了;

(5)总之,无论在解决什么问题是时,动脑,动手,善于沟通交流,再加上坚持不懈的努力总会有一些收获的!

时间: 2024-10-28 10:29:48

《 找水王》的相关文章

课堂练习之找水王

1.设计思想: 主题思路就是删除ID,每当遇到不同的ID,则删除上一个作为对比对象的ID,依次遍历所有的ID,最后剩下的那个一定是水王. 2.代码设计: //找水王,王昭博. #include <iostream> using namespace std; void main() { int num,ID[100]; cout<<"请输入帖子的数量:"; cin>>num; int i; cout<<"请依次输入帖子对应的ID号

个人作业—找水王2

题目要求:              随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID. 据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 设计思路:                1.输入总帖子数x 2.定义一个一维数组a[x],为作者id.设置循环输入作者id 3.定义三个小水王,以及其净帖子数 4.再设置一个循环,按照顺序来依次进行比较,如果净帖子数大于0则作者id不变,如果作者id等于0,则将此id作为新的小水王id,如此循环x次 5.最后剩

4月24号周五课堂练习:找水王续

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

课堂作业找水王2

找水王2: 超级水王没有了.统计结果表明,有3个发帖很多的ID ,他们的发帖数目都超过了帖子总数目N的1/4.你能从发帖ID列表中快速找出他们ID吗? 设计思想: 和上一次的思路同源,如果每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4,可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案. 代码实现: package test1; public class F

随堂练习--找水王2

问题描述: 在上一次练习的基础上,大水王消失了,出现了3个小水王,且每个水王发帖的数量都超过1/4.找出3水王 解决思路: 这1次我们可以通过六个变量来推导出三水王,每两个代表一个水王,其中一个表示 ID,另一个用来使用消除法抵消次数,因为每个水王发帖量都超过1/4,所以一遍运行下来,三水王的ID出现次数都不会被抵消 #include<iostream>#include<string>using namespace std; int main(){    string tieba[

课堂练习--“找水王续&quot;

设计思路: ①跟上次思路一样,将问题简化成从一个数组中找出出现次数最多的3个数. ②将“两两相消"的思路模式,变成“三一相消” ③初始化time为零,kingid为零,然后按顺序赋值,遇到跟kingid1相同的time1+1,其余两个同样:遇到跟三个都不同的所有time-1. 代码: import java.util.*; public class Findthreenum { public static void main(String[] args) { Scanner input = ne

4月21号周二课堂练习:找水王

一.题目要求 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半.如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 二.设计思路 论坛中有多少帖子,有多少个ID都是不清楚的.我们采用类似于消消乐的方法进行处理,具体方法如下:将所有的帖子进行遍历,比较两个帖子的ID.如果两个帖子的ID相同,则将两个帖子丢弃.

找水王(2)

一.题目要求 随着Tan-go的发展,发现,“超级水王”没有了.统-计结-果表-明,有3个发帖很多的ID,他们的 数目都超过了 总数目N的1/4.你能从 ID列表中快速找出他们的ID吗? 二.设计思想 题目的前提条件是3个水王,他们 数都超过了总数1/4,根据上次找水王的思想这次也借用消消乐的想,每次删去4个不同的id,剩下的一定还是符合3个水王的发-帖数都超过1/4: 找到一个不为0的id保存其位置,然后找到第二个不为0且不与第一个相同的id的位置,依次类推,找到第四个.然后把四个赋值为0.循

“找水王”编程实现。

题目: 在一个贴吧里,有一个水王,经常发帖,回帖,整个贴吧,有一半以上是他的帖子,已知有一张帖子清单,含有作者ID,试编写程序,找出水王. 方法: 1.首先以第一个id开始,与下一个id比较,若相同,则与再下一个比较直至两个id不同,然后清空 2.在从现有的id中选择第一个id重复以上步骤 3.重复以上步骤,直至剩余仅有一个id,即为水王 源代码: #include <iostream> #include <fstream> #include <string> usin

软件工程练习——找水王2

随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 设计思想:这次的水王有三个,所以我选择用排除法一个个进行排除,假设第一个ID是水王,用它与之后的其他ID进行比较,对出现的次数进行统计,最后将这个ID全部拿出来,放入另一个数组中(出栈入栈的思想).然后循环这个过程,直到全部水王找出. package shuiwang2; import java.util.*; public class Find_sh