#include <ctime>
class CRandom_Alg
{
public:
CRandom_Alg(void);
~CRandom_Alg(void);
bool majority(int ary[], int &x, int n);
void random_seed(unsigned long d)
{
if (d==0)
seed=time(0);
else
seed=d;
}
unsigned int my_random(unsigned long low, unsigned long high)
{
seed=Multipler*seed+Increment;
return((seed>>16) % (high-low) + low);
}
private:
static unsigned long seed;
const unsigned long Increment;
const unsigned long Multipler;
};
CRandom_Alg::CRandom_Alg(void):Multipler(0x015A4E35L),Increment(1)
{
}
CRandom_Alg::~CRandom_Alg(void)
{
}
unsigned long CRandom_Alg::seed=0;
/*
用模特卡咯方法
求解数组ary中的主元素
主元素:元素个数占数组个数的一半
*/
bool CRandom_Alg::majority(int ary[], int &x, int n)
{
int i,j,k;
random_seed(0);
i=my_random(0,n-1);
k=0;
for(j=0;j<n;j++)
{
if(ary[i]==ary[j])
k++;
}
if(k>n/2)
{
x=ary[i];
return true;
}
return false;
}
void main()
{
/
模特卡咯求数组主元素
int ary[15]={1,2,3,4,5,3,2,3,4,3,3,3,3,3,3};
int x=0;
int n=15;
CRandom_Alg m_Random_alg;
m_Random_alg.majority(ary, x, n);
cout<<x<<endl;
getchar();
return 0;