课堂练习——寻找水霸

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

二,思路:(1)将所有的ID号从小到大进行排序,然后分别统计各个ID号的个数,找出其中出现次数超过1/4的ID号,即为所求,但时间复杂度过于复杂。

(2)在思路一排序的基础上,三个水霸的ID号分别在1/4,1/2,3/4处。

(3)在上一堂课寻找水王的基础上,寻找水霸即为消去连续的4个不同的ID。

三,程序:

#include <iostream.h>
#include <conio.h>
void intID(int length,int Arr[])

{

cout<<"输入发帖人的ID:"<<endl;

for(int i=0;i<length;i++)

{

cin>>Arr[i];

}

}
int main()
{
int length;//发帖人ID的个数
int t[3]={0,0,0};
int ID[3]={-1,-1,-1};
cout<<"请输入帖子数量:";
cin>>length;
int * shuiba=new int [length];
int jixu;
intID(length,shuiba);
for(int i=0;i<length;i++)
{

if(t[0]==0 && shuiba[i]!=ID[1] && shuiba[i]!=ID[2])
{
t[0]=1;
ID[0]=shuiba[i];
}
else if(t[1]==0 && shuiba[i]!=ID[0] && shuiba[i]!=ID[2])
{
t[1]=1;
ID[1]=shuiba[i];
}
else if(t[2]==0 && shuiba[i]!=ID[0] && shuiba[i]!=ID[1])
{
t[2]=1;
ID[2]=shuiba[i];
}

else if(shuiba[i]!=ID[0] && shuiba[i]!=ID[1] && shuiba[i]!=ID[2])
{
t[0]--;
t[1]--;
t[2]--;
}
else if(shuiba[i]==ID[0])
{
t[0]++;
}
else if(shuiba[i]==ID[1])
{
t[1]++;
}
else if(shuiba[i]==ID[2])
{
t[2]++;
}

}
cout<<"水霸的ID为:"<<ID[0]<<" "<<ID[1]<<" "<<ID[2]<<endl;
cout<<endl;
cout<<"要继续测试吗?(0,退出 1,继续)"<<endl;
cin>>jixu;
if(jixu==1)
{
cout<<endl;
main();
}
else
{
return 0;
}
getch();
return 0;
}

四,运行结果:

五,总结:

这道题目相对比较简单,有了前面课堂练习的基础能够解决类似问题。但题目并不是单纯地要求实现,而是要求我们运用算法来进行优化,减少程序运行时间,这就要求我们花费时间考虑更好的解决方法。找到对的解决方法才是解决这类问题的关键。

时间: 2024-12-18 07:08:19

课堂练习——寻找水霸的相关文章

软件工程课堂作业——寻找水王2

一.题目 随着论坛的发展,管理员发现“水王”没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了总和的1/4.你能从发帖列表中快速找到他们吗? 二.设计思想 根据三个水王号的ID数均超过四分之一可以知道只要非水王号出现一次,水王号ID必定都对应会出现一次.则目前判断为水王号的ID出现则对应次数加一,非水王号出现一次则目前判断为水王号出现次数的均减一.运用这种算法则需要判断输入的ID号是否符合条件,通过判断最终判断出来的ID号的出现的次数之差可以判断出是否满足“发帖数量超过了

课堂作业--寻找水军

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

软件工程课堂作业——寻找“水王”

一.题目 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 二.设计思想: 由于该“水王”发帖数目超过了帖子数目的一半,可以通过相邻两个帖子的作者ID是否相同来寻找.如果相邻两个ID不同,则将两个ID略过:若相等,则判断之前是否有怀疑是“水王”的ID,如

课堂练习------寻找水王

•三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. •如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 1 #include<iostream.h> 2 int main() 3 { 4 int water; 5 int a[10]={1,5,2,5,3,5,4,5,5,5}; 6 int j,k=1

课堂练习——寻找水王

一,题目 •三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. •如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 二,思路 思路1:因为各个人的id号大小不同,因此可将所有人的id号按照从小到大的顺序进行排序,用快速排序法,时间复杂度为:O(N*logN).然后遍历整个数组,统计每个id号出现的次数,出

课堂练习——寻找1出现的次数

一.题目要求 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12)  = 5. 在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.设计思想 看到这个题时第一感觉就是可以用最基本的方法通过遍历的来找出1出现的次数,但是我们可以从这里面找出其中的规律,一个数中含有1的个数为个位出现的次数.十位出现的次数.百位出现的次数的和的总个数:通过分析可以知道如果是

课堂作业-寻找水王

[设计思想]   因为水王是整个论坛中发帖和回帖数加起来最多的的人,且超过总帖数的一半以上.(这里将发帖数和回帖数记在一起)使用"两两相消"的方法.将帖子的作者id纳入数组,将数组中的一个数记作疑似水王者,并记发帖数t=0.遍历数组,若数组中的数和疑似水王者id相同,使发帖数t加一.如与疑似水王者id不同,使发帖数t减一.当t=0时,将数组中当前与水王疑似者比较的数作为新的疑似水王者.循环结束,当前水王怀疑者就是水王. [代码实现] 1 2 3 4 5 6 7 8 9 10 11 12

课堂练习------寻找水王2

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

[转载]Java学习方法之我见

这是别人的学习心得,有很多值得我去学习的地方,慢慢来吧! 1.学java切忌浮躁 欲速则不达,不要被新技术迷惑,先把基础学扎实,一步一个脚印的逐步学习,不要想着一步登天.我们要如水底磐石切不可做那水上浮萍,浮躁的人永远学不到什么东西.软件开发之路是充满荆棘与挑战之路,也是充满希望之路,没有捷径可走.梦想像<天龙八部>中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的.每天仰天大叫"天神啊,请赐给我一本葵花宝典吧",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,