个人项目——找水王续
寻找论坛里的水王(续)
一、程序要求
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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
个人项目——找水王续相关推荐
- 打开别人Xamarin项目找不到android.jar文件
打开别人Xamarin项目找不到android.jar文件 错误信息:Could not find android.jar for API Level 23. 打开非本机创建的Xamarin项目,编译 ...
- Xamarin中打开别人项目找不到android.jar文件
Xamarin中打开别人项目找不到android.jar文件 错误信息:Could not find android.jar for API Level 23. 打开非本机创建的Xamarin项目,编 ...
- Xamarin iOS项目找不到模拟器
Xamarin iOS项目找不到模拟器 在Visual Studio中,突然找不到模拟器,并且项目提示试用期过期:Trial period has expired.出现这种情况,是由于苹果系统中Xam ...
- java mac jconsole_解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题
今天遇到了这样一种情况,自己的maven项目中并没有引用的jar包出现在了Maven Dependencies的依赖包中.而我在pom.xml自己没有没有引入啊. 图示 怀疑是自己的alibaba 的 ...
- IDEA导入Git项目后右键项目找不到Git选项的解决方法
IDEA导入Git项目后右键项目找不到Git选项的解决方法 参考文章: (1)IDEA导入Git项目后右键项目找不到Git选项的解决方法 (2)https://www.cnblogs.com/pret ...
- 解决IDEA创建多模块项目找不到创建class类的问题
解决IDEA创建多模块项目找不到创建class类的问题 参考文章: (1)解决IDEA创建多模块项目找不到创建class类的问题 (2)https://www.cnblogs.com/memoa/p/ ...
- IDEA 2019.3新建项目找不到Maven的解决方法
IDEA 2019.3新建项目找不到Maven的解决方法 参考文章: (1)IDEA 2019.3新建项目找不到Maven的解决方法 (2)https://www.cnblogs.com/wuxiii ...
- Jenkins部署maven项目找不到jar包解决
Jenkins部署maven项目找不到jar包解决 环境部署 问题描述 解决方案 环境部署 1. centos搭建java部署环境 2. jenkins环境搭建 3. jenkins部署springb ...
- maven项目找不到pom.xml配置的dependency jar中的类问题解决方法
成功创建一个web项目后,假如我们在web.xml文件中,配置了spring的listener,在pom.xml中也已经作了依赖配置.部署 完项目后,启动项目,发现找不到spring配置的listne ...
最新文章
- 详细的多维度测评,看看哪个 Python 版本速度最快!
- 在列表前方插入一个数据_Python基础知识详解(三):数据结构篇
- mysql 变量赋值方法
- 【错误记录】VMware 虚拟机报错 ( Ubuntu-Unattended upgrade in progress during shutdown, please don‘t turn off )
- vue 项目抛出警告
- 查看计算机CPU、内存使用情况
- thincmf 分页无法搜索_thinkcmf5 后台搜索分页保持分页条件
- TVP5150真正的驱动起来了
- 今天看到导师给我的批注哭了...
- jquery在线预览PDF文件,打开PDF文件
- kafka 重新分配节点_你可能需要的Kafka面试题与部分答案整理
- vm虚拟机安装win7出现 Error loading image cdmenu.ezb
- python pdfminer3k_Python对pdf中的关键字过滤(pdfminer3k或pdfminer使用)
- 微信扫码授权登录-王者荣耀
- 在云端管理您的所有身份(AAD)-第二部分
- 奥扬科技IPO被终止注册:年营收8亿 苏伟持有67.5%股权
- e470换高分屏_给ThinkPad E470C 换个高分屏(1080P)
- 视频按帧截取 python程序
- Linux入门教程(附上demo)
- 使用Python3和BeautifulSoup4处理本地html文件
热门文章
- bitmap内存溢出
- 懒人玩Arm-2D究竟有几种姿势?
- 计算机屏幕出现条纹w7,电脑屏幕出现条纹,教您电脑屏幕出现条纹怎么办
- 【新闻】微信出现大面积BUG!腾讯紧急回应!
- 信息系统项目管理师(2022年)—— 重点内容:项目质量管理(8)
- 付呗聚合支付快速教程 分账篇③——多商户模式下分账提现全流程详解
- java输入两个数字和运算符_java 第二天运算符及录入函数Scanner
- 如何检查DirectX的版本(用于Windows Phone Developer Tools的安装检查)
- 网关、开放平台如何设计appKey,appSecret,accessToken的生成和校验机制
- LeetCode-Python-273. 整数转换英文表示