码迷,mamicode.com
首页 > 其他好文 > 详细

4月24号周五课堂练习:找水王续

时间:2015-04-26 19:40:35      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

一、题目要求

三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
二、设计思路
技术分享
三、程序代码
#include<iostream>
#include<assert.h>
using namespace std;
int * search(int *userId,int n)
{
	int curId[3]={0};//当前保存的三个不同ID
	int curNum[3]={0};//当前三个不同ID各自的数目;
	for(int i=0;i<n;i++)
	{
		if(curNum[0]==0&&userId[i]!=curId[1]&&userId[i]!=curId[2])//用户ID在当前ID中不存在相同ID且userID[0]的当前数量为0;
		{
			curNum[0]=1;
			curId[0]=userId[i];
		}
		else if(curNum[1]==0&&userId[i]!=curId[0]&&userId[i]!=curId[2])
		{
			curNum[1]=1;
			curId[1]=userId[i];
		}
		else if(curNum[2]==0&&userId[i]!=curId[0]&&userId[i]!=curId[1])
		{
			curNum[2]=1;
			curId[2]=userId[i];
		}
		else if(userId[i]==curId[0])//用户ID和当前ID相同则当前ID数+1
		{
			curNum[0]++;
		}
		else if(userId[i]==curId[1])
		{
			curNum[1]++;
		}
		else if(userId[i]==curId[2])
		{
			curNum[2]++;
		}
		else if(userId[i]!=curId[0]&&userId[i]!=curId[1]&&userId[i]!=curId[2])//四种ID一起抵消
		{
			curNum[0]--;
			curNum[1]--;
			curNum[2]--;
		}
	}
	return curId;//返回当前剩余的三个ID即为三个水王
}
void main()
{
	int n;
	int * userId;
	int curId[3]={0};
	int curNum[3]={0};
	int i;
	cout<<"输入灌水帖子数:";
	cin>>n;
	assert(n>0);
	userId=new int[n];
	cout<<"输入每一条灌水帖子id:"<<endl;
	for(i=0;i<n;i++)
	{
		cin>>userId[i];
	}
	for(i=0;i<3;i++)//输出三个水王ID
	{
		cout<<*search(userId,n)+i<<"\t";
	}
}
四、程序截图
技术分享
五、实验总结
 程序存在问题,目前还没有找到正确的解决办法。只能将此半成品上传,后期会更新。找水王续,比找水王要难的多。从找水王的方法很容易类比找到方法。但是消除的方法,用代码很难实现。因为有很多的特例。比如11111111112222345666666777777777895.满足题意,但是很难用消除法实现。

4月24号周五课堂练习:找水王续

标签:

原文地址:http://www.cnblogs.com/huangxiaofei/p/4456387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!