用PHP解决约瑟夫环算法实例
约瑟夫环问题:39个犹太人,约瑟夫斯和他的朋友们藏在山洞里,和39个犹太人决定死而不是被敌人抓住。我决定自杀,41人排成一圈,从第一个人开始数,报告数量的每个人在第三人必须自杀。然后重新关闭,直到每个人都打死为止自杀。然而,约瑟夫斯和他的朋友们不想遵守。约瑟夫斯让他的朋友先假装服从。他把自己的朋友安排在第十六个和第三十一个位置,所以他逃过了死神的游戏。
< PHP
类arraystack
{
私人大小;
私有$堆栈{ };
公共功能(__construct){ }
公共功能buildstack($num){
$;
指数= 0;
而(指数+大小)
{
$ >堆栈;
}
}
公共函数POP(){
项目= array_shift美元(美元->堆栈);
此$ =大小=计数($此堆栈);
返回$项;
}
公共功能推送($项目)
{
$ >堆栈;
此$ =大小=计数($此堆栈);
}
公共功能大小()
{
返回$ >大小;
}
公共功能堆栈()
{
返回这个堆栈;
}
}
约瑟夫接口
{
公共函数句柄($ = 0,$ = 0,幸存者= 0);
}
约瑟夫stackjoseph实现类
{
保护堆栈;
保护美元;
保护$步;
公共功能__construct(arraystack叠美元)
{
此堆栈;
}
公共函数句柄($ = 0,$ = 0,幸存者= 0)
{
实现句柄(方法):
美元->堆栈-> buildstack(美元数);
$ I = 0;
当($)-堆栈>大小()>幸存者时)
{
$;
如果(($ + 1)% $步!= 0)
{
这一点>堆栈>推($ POP);
美元+;
}
其他的
{
$ I = 0;
}
}
返回这个堆栈>堆栈();
}
}
函数的约瑟夫($民,一步survivorsnum美元,美元)
{
arraystack美元=新ArrayStack();
约瑟夫=新stackjoseph美元(美元arraystack);
返回的约瑟夫->处理($民,一步survivorsnum美元,美元);
}
print_r(约瑟夫(41, 3, 2));
实施结果:
阵列
(
{ 0 } = 16
{ 1 } = 31
)
关于PHP相关内容的更多读者感兴趣的读者可以看到特别站:PHP数据结构和算法教程
希望本文能对PHP程序设计有所帮助。