题目:

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

 

思路:

每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),剩下的ID中,原发帖大于1/4的ID所占比例仍然大于1/4,不断重复这个过程,把ID列表中的ID总数降低。

 

代码:

#include<iostream>
using namespace std;

void Find(int ID[], int N, int candidate[])
{
	int nTimes[] = { 0,0,0 };
	for (int i = 0; i<N; i++)
	{
		if (ID[i] == candidate[0])
		{
			nTimes[0]++;
		}
		else if (ID[i] == candidate[1])
		{
			nTimes[1]++;
		}
		else if (ID[i] == candidate[1])
		{
			nTimes[2]++;
		}
		else if (nTimes[0] == 0)
		{
			nTimes[0] = 1;
			candidate[0] = ID[i];
		}
		else if (nTimes[1] == 0)
		{
			nTimes[1] = 1;
			candidate[1] = ID[i];
		}
		else if (nTimes[2] == 0)
		{
			nTimes[2] = 1;
			candidate[2] = ID[i];
		}
		else
		{
			nTimes[0]--;
			nTimes[1]--;
			nTimes[2]--;
		}
	}
	cout<<"三个小水王ID是:";
	for (int i = 0; i<3; i++)
	{
		cout<<candidate[i]<< " ";
	}
}

void main()
{
	int ID[] = { 1,1,1,2,2,2,3,3,3,1,2,3,1,2,3,6 };
	int N = 16;
	int candidate[] = { -1,-1,-1 };

	cout<<"发帖ID为:";
	for (int i = 0; i<N; i++)
	{
		cout<<ID[i]<<" ";
	}
	cout << endl;
	Find(ID, N, candidate);
}

  运行结果:

 posted on 2016-05-27 11:05  呼噜~呼噜  阅读(157)  评论(0编辑  收藏  举报