用蒙特卡罗解决主元素的问题,急救

halo8868 2010-10-27 08:05:01
#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,谢谢大家了,我急用
...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
logiciel 2010-10-27
  • 打赏
  • 举报
回复
在函数majority中:

if(t[j]=x)
改为
if(t[j]==x)
halo8868 2010-10-27
  • 打赏
  • 举报
回复
发错了 应该发到c++区

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧