现在的位置: 首页 > 综合 > 正文

干扰数

2018年07月11日 ⁄ 综合 ⁄ 共 823字 ⁄ 字号 评论关闭

开发环境VS2005(VC8)

#include <iostream>
#include <vector>
using namespace std ;
#include <time.h>

#define ULONG unsigned long

//干扰数的意义
//当要连续调用rand的时候,几个rand关联性太强,可以rand()+干扰数
class IGanRaoShu //干扰数,取一个数,分布没有任何规律,可以重复。配合随机数,防止随机数规律过强。
{
public:
    virtual ULONG GetGanRao()= 0;
};

class CGanRaoShu : public IGanRaoShu
{
public:
    typedef long (* GANRAO_FUN)() ;

    CGanRaoShu()
    {
        m_iPos = 0 ;
    };
    ULONG GetGanRao()
    {
        if( 0 == m_pFuns.size() )
            return 0;
        m_iPos = ( m_iPos + 1 ) % m_pFuns.size();
        return m_pFuns[m_iPos]();
    };
    void AddGanRaoFun(GANRAO_FUN pFun)
    {
        m_pFuns.push_back(pFun);
    };    
protected:
    std::vector<GANRAO_FUN> m_pFuns;
    int m_iPos ;
};

long GetCurTime()
{
    return time(NULL);
}

void main()
{
    CGanRaoShu g ;
    g.AddGanRaoFun(clock);
    g.AddGanRaoFun(GetCurTime);
    for( int i = 0 ; i < 100 ; i++ )
    {
        cout << g.GetGanRao() << endl;
    }    
}

抱歉!评论已关闭.