课堂练习之检测水军

一、实验题目与设计思路

1、题目:

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

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

2、设计思路

首先这个题目有有一个前提就是在总帖数一定的情况下,这些帖子里面有一半以上的帖子都设计到一个ID,这个ID就是水军,为了制止这个水军,就要检测出这个水军,那么我们定义一个数组,数组里面的数字定为水军的ID,在这个数组里面查找出在数组里出现半数以上的这个ID,要求时间复杂度为o(n),意思就是只能有一层for循环,按照老师上课讲的采用消消乐的方式,两个不一样的就消去,因为水军的帖子数超过半数,那么消到最后剩下的就是水军,然后在输出这个水军的ID。

二、源代码

 1 // shuiwang.cpp : Defines the entry point for the console application.
 2 //
 3
 4 #include "stdafx.h"
 5 #include "stdio.h"
 6
 7
 8 int main(int argc, char* argv[])
 9 {
10     int a[10000];
11     int tiezishu;
12     int i,j,k=1;
13     int shui;
14     printf("请输入帖子总数:");
15     scanf("%d",&tiezishu);
16     printf("\n");
17     for(i=0;i<tiezishu;i++)
18     {
19         printf("\n请输入第%d个帖子的ID:",i+1);
20         scanf("%d",&a[i]);
21     }
22     shui=a[0];
23     for(i=1;i<tiezishu;i++)
24     {
25         if(shui!=a[i])
26         {
27             k=k-1;
28             if(k<0)
29             {
30                 shui=a[i+1];
31                 k=1;
32                 i++;
33             }
34         }
35         else
36         {
37             shui=a[i];
38             k=k+1;
39         }
40
41     }
42     printf("\n水王ID是:%d\n",shui);
43     return 0;
44 }

三、运行结果截图

四、心得体会

每一个题目的设计实现有很多种方法,有笨的方法,有简单的方法,有最优化的方法,也有复杂度比较大的方法,这次老师要求我们用时间复杂度比较低的方法来实现,但是首先我想到的还是最笨的方法来实现,以前对程序的时间复杂度并没有要求,只要能够实现了题目的要求就好了,程序实现了也没有想过优化,但是这次深刻的体会到了,一个好的程序代码精简但是功能强大。话又说回来,一个好的程序设计的难度也是比较高的,但是我们要这样的锻炼下去,我相信慢慢的我们的能力就会提高很大。

时间: 2024-10-13 23:28:54

课堂练习之检测水军的相关文章

课堂练习之检测水军(拓展)

一.题目 三人行设计了一个灌水论坛.随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 二.设计思路 上一次是找出一个水军,这个水军发帖数超过了总帖数一半,这一次是找三个水军,这三个水军每一个人的帖子数都超过了总帖数的1/4,我们只需要在上一次的基础上进行改进就可以了,上一次是挨着消去两个,这次挨着消去四个,剩下最后的三个就是水军. 三.源代码 1 // shuitong.cpp : Defines t

课堂作业--寻找水军

一.题目要求 随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 二.设计思路 本次题目是在上次寻找“水王”的基础上进行拓展,设计思路和上次的相似,上次寻找水王是用的一个水王变量,一个计数变量,那么本次的设计思想沿用上次的技巧,有三个水军变量,三个计数变量:分别使水军的这三个变量和下一个数比较,然后和三个水军相对应的计数变量分别进行计数,相同则加一,不同则抵消减一:依次循环,和水王的规则类似,最后找到3

课堂作业——找水军

题目: 思路: 编程之美的扩展了这个问题,在求解找出一个“水王”的基础上进行补充分析,之前遍历数组的时候只用保存两个值:一个是数组中的ID,一个是它对应出现的次数.而这次需要找出3个ID(即输出3个结果),就需要另开辟新的数组来分别保存.首先保存前3个ID,每当遍历下一个ID的时候,先要判断下一个和当前保存的这3个ID是否有相同的,若有相同的则此ID对应的次数加1:若不同则次数减1.再判断如果有ID次数为零,就用下一个ID把它替换,并把次数设为1.与之前不同的是,可能会出现次数都不为0的情况,这

坑爹的C++要课堂检测了 然而我什么都没学

前六章的知识框架 概念(细枝末节的纠缠) 细节点的分析(坑逼) 实际的代码演练 ? Chapter1基础知识 进制 存储 Chapter2 简单程序 数据类型 运算符和表达式 数据类型转化 I/O Chapter3 控制结构 (循环嵌套是什么鬼) Chapter4 函数 Chapter5 数组(二维数组是什么鬼 然而完全不会) Chapter6 自定义数据类型(然而只会结构体) ? (卧槽这是什么鬼啊,别人 数学逻辑不错然而好东西我看不懂啊) (以后做作业解决问题也要好好写随笔 !) TAGS:

课堂检测

ScoreInformation类: package ceshi; class ScoreInformation { private String stunumber; private String name; private double mathematicsscore; private double englishiscore; private double networkscore; private double databasescore; private double softwar

翻转课堂

翻转课堂 翻转课堂译自“Flipped Classroom”或“Inverted Classroom”,是指重新调整课堂内外的时间,将学习的决定权从教师转移给学生.在这种教学模式下,课堂内的宝贵时间,学生能够更专注于主动的基于项目的学习,共同研究解决本地化或全球化的挑战以及其他现实世界面临的问题,从而获得更深层次的理解.教师不再占用课堂的时间来讲授信息,这些信息需要学生在课后完成自主学习,他们可以看视频讲座.听播客.阅读功能增强的电子书,还能在网络上与别的同学讨论,能在任何时候去查阅需要的材料.

Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简称vld). vld工具是VC++环境下一款小巧易用.免费开源的内存泄漏检测工具,vld可以显示导致内存泄漏的完整内存分配调用堆栈.vld的检测报告能够对每个内存泄漏点提供完整的堆栈跟踪,并且包含其源文件及行号信息. 安装过程是,先在到地址http://vld.codeplex.com/下载vld安

2017年最权威的1000集大型web前端视频教程(爱创课堂出品)文后附录视频下载链接

2017年最新爱创课堂前端开发课程介绍爱创课堂Web前端开发工程师培训-价值1万8课程 资料持续更新中,第一时间领取请加QQ2079576908 Web前端开发工程师,主要职责是利用HTML.XHTML.CSS.JAVAScript.FLASH等各种Web前端技术进行客户端产品的开发.完成客户端程序(也就是浏览器端)的开发,开发JavaScript以及Flash模块,同时结合后台开发技术模拟整体效果,进行丰富互联网的Web前端开发,致力于通过技术改善用户体验. 第一阶段:页面制作基础 从这一基础

2016年最权威的1000集大型web前端视频教程(爱创课堂出品)

标题:2016年最权威的1000集大型web前端视频教程(爱创课堂出品): 爱创课堂Web前端开发工程师培训-价值1万8课程Web前端开发工程师,主要职责是利用HTML.XHTML.CSS.JAVAScript.FLASH等各种Web前端技术进行客户端产品的开发.完成客户端程序( 也就是浏览器端)的开发,开发JavaScript以及Flash模块,同时结合后台开发技术模拟整体效果,进行丰富互联网的Web前端开发,致力于 通过技术改善用户体验. 需要联系下载视频请加QQ:2079576908 第一