寻找论坛里的水王(续)

一、程序要求

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

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

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

二、程序设计思想

题目给出:发帖数目都超过了帖子总数目N的1/4,把回帖列表简单化——一个数组里,存着若干数,其中三个数的数目均超过数组中所有数的数目的1/4。若每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4,可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案。所以,每四个数比较:若四个数都不相同,将前三个数设为水王,并删除这四个数,对应的目前水王出现次数均减1,且对结果无影响;若有相同的数,对应的目前水王出现次数加1,接着比较接下来的数,重复上述过程,一直到最后一个数,找到这三个水王。

三、源程序

//李俏,找水王续抽象程序
//2016.5.25

#include<iostream>
using namespace std;void FindWaterKing(int ID[], int num, int wkresult[3])
{int i;int ID_Impossible = -1;//定义一个不可能存在的IDint wknum[3];//水王出现的次数wknum[0] = wknum[1] = wknum[2] = 0;wkresult[0] = wkresult[1] = wkresult[2] = ID_Impossible;//水王的ID,初始化for (i = 0; i<num; i++){if (ID[i] == wkresult[0])//水王1出现次数统计
        {wknum[0]++;}else if (ID[i] == wkresult[1])//水王2出现次数统计
        {wknum[1]++;}else if (ID[i] == wkresult[2])//水王3出现次数统计
        {wknum[2]++;}else if (wknum[0] == 0)//将前三个不同的数先存为水王
        {wknum[0] = 1;wkresult[0] = ID[i];}else if (wknum[1] == 0)//将前三个不同的数先存为水王
        {wknum[1] = 1;wkresult[1] = ID[i];}else if (wknum[2] == 0)//将前三个不同的数先存为水王
        {wknum[2] = 1;wkresult[2] = ID[i];}else//此时找到四个不同的数,删除,并且出现次数减1,但是次数不一定为0
        {wknum[0]--;wknum[1]--;wknum[2]--;}}
}int main()
{int wkresult[3];//找出其中3个符合条件的ID(每个ID的总数分别占ID总数的1 / 4以上)int num, arr[1000];int i,j;cout << "请输入帖子的数量:";cin >> num;if (arr == NULL || num == 0)//数组为空
    {//exit(1);return 0;}cout << "请输入帖子ID:" << endl;for (i = 0; i < num; i++){cin >> arr[i];}FindWaterKing(arr, num, wkresult);cout << "3个水王的ID分别是:";for (j = 0; j < 3; j++)cout << wkresult[j] << " ";cout << endl;return 0;
}

四、结果截图

五、心得体会

有了上次的经验,我没有晕,而是根据经验将四个数分为一组,但是对于程序还是有些没头绪,不过沿着上次的思路——设前三个不同的数为水王,通过比较,留下出现次数最多的三个数。上次的实验有好多不足,如没有考虑数组为空的情况、不能用void main()、应该将主要算法用函数封装起来等等。通过这次课堂练习,我能够举一反三的分析问题,这是一点进步,但是对于将语言转化为程序代码这一块儿,还是有点儿欠缺,希望以后的练习中可以有所进步。实现过程中,出现了不少问题,但是已经在查资料和调试下解决了。

转载于:https://www.cnblogs.com/Aliqiao/p/5534480.html

个人项目——找水王续相关推荐

  1. 打开别人Xamarin项目找不到android.jar文件

    打开别人Xamarin项目找不到android.jar文件 错误信息:Could not find android.jar for API Level 23. 打开非本机创建的Xamarin项目,编译 ...

  2. Xamarin中打开别人项目找不到android.jar文件

    Xamarin中打开别人项目找不到android.jar文件 错误信息:Could not find android.jar for API Level 23. 打开非本机创建的Xamarin项目,编 ...

  3. Xamarin iOS项目找不到模拟器

    Xamarin iOS项目找不到模拟器 在Visual Studio中,突然找不到模拟器,并且项目提示试用期过期:Trial period has expired.出现这种情况,是由于苹果系统中Xam ...

  4. java mac jconsole_解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题

    今天遇到了这样一种情况,自己的maven项目中并没有引用的jar包出现在了Maven Dependencies的依赖包中.而我在pom.xml自己没有没有引入啊. 图示 怀疑是自己的alibaba 的 ...

  5. IDEA导入Git项目后右键项目找不到Git选项的解决方法

    IDEA导入Git项目后右键项目找不到Git选项的解决方法 参考文章: (1)IDEA导入Git项目后右键项目找不到Git选项的解决方法 (2)https://www.cnblogs.com/pret ...

  6. 解决IDEA创建多模块项目找不到创建class类的问题

    解决IDEA创建多模块项目找不到创建class类的问题 参考文章: (1)解决IDEA创建多模块项目找不到创建class类的问题 (2)https://www.cnblogs.com/memoa/p/ ...

  7. IDEA 2019.3新建项目找不到Maven的解决方法

    IDEA 2019.3新建项目找不到Maven的解决方法 参考文章: (1)IDEA 2019.3新建项目找不到Maven的解决方法 (2)https://www.cnblogs.com/wuxiii ...

  8. Jenkins部署maven项目找不到jar包解决

    Jenkins部署maven项目找不到jar包解决 环境部署 问题描述 解决方案 环境部署 1. centos搭建java部署环境 2. jenkins环境搭建 3. jenkins部署springb ...

  9. maven项目找不到pom.xml配置的dependency jar中的类问题解决方法

    成功创建一个web项目后,假如我们在web.xml文件中,配置了spring的listener,在pom.xml中也已经作了依赖配置.部署 完项目后,启动项目,发现找不到spring配置的listne ...

最新文章

  1. 详细的多维度测评,看看哪个 Python 版本速度最快!
  2. 在列表前方插入一个数据_Python基础知识详解(三):数据结构篇
  3. mysql 变量赋值方法
  4. 【错误记录】VMware 虚拟机报错 ( Ubuntu-Unattended upgrade in progress during shutdown, please don‘t turn off )
  5. vue 项目抛出警告
  6. 查看计算机CPU、内存使用情况
  7. thincmf 分页无法搜索_thinkcmf5 后台搜索分页保持分页条件
  8. TVP5150真正的驱动起来了
  9. 今天看到导师给我的批注哭了...
  10. jquery在线预览PDF文件,打开PDF文件
  11. kafka 重新分配节点_你可能需要的Kafka面试题与部分答案整理
  12. vm虚拟机安装win7出现 Error loading image cdmenu.ezb
  13. python pdfminer3k_Python对pdf中的关键字过滤(pdfminer3k或pdfminer使用)
  14. 微信扫码授权登录-王者荣耀
  15. 在云端管理您的所有身份(AAD)-第二部分
  16. 奥扬科技IPO被终止注册:年营收8亿 苏伟持有67.5%股权
  17. e470换高分屏_给ThinkPad E470C 换个高分屏(1080P)
  18. 视频按帧截取 python程序
  19. Linux入门教程(附上demo)
  20. 使用Python3和BeautifulSoup4处理本地html文件

热门文章

  1. bitmap内存溢出
  2. 懒人玩Arm-2D究竟有几种姿势?
  3. 计算机屏幕出现条纹w7,电脑屏幕出现条纹,教您电脑屏幕出现条纹怎么办
  4. 【新闻】微信出现大面积BUG!腾讯紧急回应!
  5. 信息系统项目管理师(2022年)—— 重点内容:项目质量管理(8)
  6. 付呗聚合支付快速教程 分账篇③——多商户模式下分账提现全流程详解
  7. java输入两个数字和运算符_java 第二天运算符及录入函数Scanner
  8. 如何检查DirectX的版本(用于Windows Phone Developer Tools的安装检查)
  9. 网关、开放平台如何设计appKey,appSecret,accessToken的生成和校验机制
  10. LeetCode-Python-273. 整数转换英文表示