用蒙特卡罗解决主元素的问题,急救
#include<iostream.h>
#include<math.h>
#include<time.h>
const unsigned long maxshort=65536L;
const unsigned long multiplier=1194211693L;
const unsigned long adder=12345L;
class RandomNumber
{
private:
unsigned long randSeed; //当前种子
public:
RandomNumber(unsigned long s=0); //构造函数,缺省值0表示有系统自动产生种子
unsigned short Random(unsigned long n); //产生0:n-1之间的随机整数
double fRandom(void); //产生[0,1)之间的随机实数
};
unsigned short RandomNumber::Random(unsigned long n)
{//产生0:n-1之间的随机整数
randSeed = multiplier * randSeed + adder;
return(unsigned short)((randSeed>>16) % n);
}
RandomNumber::RandomNumber(unsigned long s)
{//产生种子
if(s==0)
randSeed=time(0); //用系统时间产生种子
else
randSeed=s; //由用户提供种子
}
bool majority(int *t,int n)
{
RandomNumber rnd;
int i=rnd.Random(n)+1;
int x=t[i];
int k=0;
for(int j=1;j<=n;j++)
{
if(t[j]=x)
k++;
}
return k>n/2;
}
bool majoritymc(int *t,int n)
{
//double e=2.718281828459 ;
//int k=ceil(log(1/e)/log(2));
int k=100;
for(int i=1;i<=k;i++)
if(majority(t,n))
return true;
return false;
}
int main()
{ int n=7,t[7]={1,2,3,4,5,6,7};
//for(int i=0;i<7;i++)
// cin>>t[i];
cout<< majoritymc(t,n)<<endl;
}
找不出哪儿的问题,应该输出0,输出的确是1,谢谢大家了,我急用