跳过导航.
主页

这样的算法你会设计吗???

设计

我想设计这样的算法:有一函数outfun(),返回值只有0和1,outfun()内有一调用函数inner(),它的返回值也只有0和1,由于inner()的调用比较耗资源,所以我并不是想每次运行outfun()时都会调用到inner(),我只是想定期调用到inner()而已,而一旦当inner()的返回值为0时(若为1时,outfun正常执行),则此后每次调用outfun()时都要检查inner()的返回值(而不是定期检查),若始终为0时,则outfun()的返回值始终也要返回0(达到阻止outfun正常执行的效果),直到检查inner()的返回值为1时,outfun()才按照原来的程序代码执行下去,而inner()返回1后而此后每次调用又按照前面所讲的定期来检查inner()的返回值,如此反复下去。
(其实这里的inner()是达到控制outfun()执行的效果,它就象一个通行证检查人员,
它会定期检查你有无通行证(即是检查返回1和0来实现),若有的话它又会再定期才检查,一旦你没通行证的话它就会连续检查,没的话就不让你通过(让outfun返回0),直到你有了通行证它才会恢复原来的定期检查)
这样的算法怎么设计??请高手们指点一下!
补:其实inner()是一个授权加密文件来的,而outfun可以当做一个系统,有授权加密文件,系统正常执行,没的话系统失败执行。



评论查看选项

选择您喜欢的显示评论的模式,并点击"保存设置"来激活您所做的改变。

用随机数函数应该可以解决吧

int nFlag = 0;
const int nSetTime = 5;// 设置 定期检测的时间
int nSecond = 0; //初始化检测时间
int Class::outfun()
{
if ( 0 == nFlag )
{
if ( 0 == inner() )
{
nFlag = 0;
return nFlag;
}
else if ( 1 == inner() )
{
nFlag = 1;
nSecond = 0;
SetTimer(1,1000,NULL);
return nFlag;
}
}
else if ( 1 == nFlag )
{
if( nSetTime == nSecond )
{
if ( 0 == inner() )
{
nFlag = 0;
return nFlag;
}
else if ( 1 == inner() )
{
nFlag = 1;
SetTimer(1,1000,NULL);
return nFlag;
}
}
else if ( nSetTime != nSecond )
{
return nFlag;
}
}
}

void Class::OnTimer(UINT nIDEvent)
{
nSecond ++;
CView::OnTimer(nIDEvent);
}