模特卡咯求解数组主元素

#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;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值