课堂练习----水王程序
2015-04-22 18:16
253 查看
一、题目要求
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
二、设计思想
水王问题就是根据消消乐游戏的一个变形,消消乐是消除相同的图案,而找出水王则是删掉相邻的不同的ID,由于“水王”发帖数目超过了帖子数目的一半,这样剩下的ID一定是水王的ID。这样就满足了时间复杂度为O(n)的要求。
三、代码实现
四、运行截图
五、实验总结
在刚开始思考这个问题的时候,用了最笨的方法,就是先排序,由于“水王”发帖数目超过了帖子数目的一半,然后发现中间的ID一定是水王的ID,不过这样的时间复杂度最小是O(n+lg(n)),不满足老师的要求,所以只能一次遍历然后就找到水王的ID。在实现的过程中改了好多次,总是不太顺利,不过最终在同学的帮助下还是完成了!
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
二、设计思想
水王问题就是根据消消乐游戏的一个变形,消消乐是消除相同的图案,而找出水王则是删掉相邻的不同的ID,由于“水王”发帖数目超过了帖子数目的一半,这样剩下的ID一定是水王的ID。这样就满足了时间复杂度为O(n)的要求。
三、代码实现
#include<iostream.h> void main() { int arr[10]={3,3,6,4,3,5,3,3,7,3};//假设的ID号 int shuiwang = 0; int count=0; //标记 cout<<"假设有10个ID,分别为:"; for(int i=0;i<10;i++) { cout<<arr[i]<<" "; if(count == 0) { shuiwang = arr[i]; count = 1; } else { if(shuiwang == arr[i]) count ++; else count --; } } cout<<endl<<"水王的ID是"<<shuiwang<<endl; }
四、运行截图
五、实验总结
在刚开始思考这个问题的时候,用了最笨的方法,就是先排序,由于“水王”发帖数目超过了帖子数目的一半,然后发现中间的ID一定是水王的ID,不过这样的时间复杂度最小是O(n+lg(n)),不满足老师的要求,所以只能一次遍历然后就找到水王的ID。在实现的过程中改了好多次,总是不太顺利,不过最终在同学的帮助下还是完成了!
相关文章推荐
- 3月10号周二课堂练习:关于自动生成四则运算题目的程序的延伸
- 第三次程序报告(课堂练习)
- matlab练习程序(生成黑白网格)
- matlab练习程序(非负矩阵分解)
- C++文本查询程序 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- 课堂练习-找水王(4.21)
- C++文本查询程序 定义类管理数据 用智能指针 C++Primer练习12.30
- 课堂练习3
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- matlab练习程序(结构张量structure tensor)
- 课堂练习&课下作业
- 两个程序练习
- matlab练习程序(随机抽样一致RANSAC)
- Java程序练习-回文平方数
- 3月06号周五课堂练习:随机产生30个思则运算的题目
- Java程序练习-2011
- Linux Linux程序练习四
- matlab练习程序(方框模糊)
- Java程序练习-生日相同
- Cocoa练习01:一个简单的Todo list程序