JavaScript使用指针操作实现约瑟夫问题实例
本文实例讲述了JavaScript使用指针操作实现约瑟夫问题的方法。分享给大家供大家参考。具体分析如下:
实现之前当然要自己来编写一些JS数组内部指针的操作函数,就像:reset(),current(),next(),prev(),search(),end()这些函数,我们都要来自己实现,因为JS没有内置这些神奇的操作函数
Array.prototype.pointer=0;//模拟数组内部指针 //Reset函数,将数组内部指针归位(指向第一个元素) varreset=function(arrayObj){ if(!(arrayObjinstanceofArray)){ alert("Reset()函数参数类型错误!请检查输入!"); return; } arrayObj.pointer=0; } //Current函数,返回数组内部指针指向的当前元素 varcurrent=function(arrayObj){ if(!(arrayObjinstanceofArray)){ alert("Current()函数参数类型错误!请检查输入!"); return; } returnarrayObj[arrayObj.pointer]; } //End函数,将数组内部指针指向最后一个元素 varend=function(arrayObj){ if(!(arrayObjinstanceofArray)){ alert("End()函数参数类型错误!请检查输入!"); return; } arrayObj.pointer=arrayObj.length-1; returnarrayObj[arrayObj.pointer]; } //Next函数,将数组内部指针下移一位 //如果已经指向最后一个元素则返回FALSE varnext=function(arrayObj){ if(!(arrayObjinstanceofArray)){ alert("Next()函数参数类型错误!请检查输入!"); return; } arrayObj.pointer++; if(typeofarrayObj[arrayObj.pointer]=='undefined'){ arrayObj.pointer--; returnfalse; } returntrue; } //Prev函数,将数组内部指针上移一位 //如果已经指向第一个元素则返回FALSE varprev=function(arrayObj){ if(!(arrayObjinstanceofArray)){ alert("Prev()函数参数类型错误!请检查输入!"); return; } arrayObj.pointer--; if(typeofarrayObj[arrayObj.pointer]=='undefined'){ arrayObj.pointer++; returnfalse; } returnarrayObj[arrayObj.pointer]; } //Unset函数,删除指定的数组元素 varunset=function(index,arrayObj){ if(!(arrayObjinstanceofArray)){ alert("Unset()函数参数类型错误!请检查输入!"); return; } if(typeofarrayObj[index]=='undefined'){ alert("Unset()函数参数index错误!不存在此元素!"); returnfalse; } arrayObj.splice(index,1); returntrue; } //Search函数,通过数组键值返回数组的键名 varsearch=function(value,arrayObj){ if(!(arrayObjinstanceofArray)){ alert("Search()函数参数类型错误!请检查输入!"); return; } for(indexinarrayObj){ if(arrayObj[index]==value){ returnindex; } } returnfalse; } //getKingMonkey函数,我们的约瑟夫主函数,n只猴子,数到m functiongetKingMonkey(n,m){ a=newArray(); for(i=1;i<=n;i++){ a[i]=i; } a[0]=0;unset(0,a);reset(a); while(a.length>1){ for(counter=1;counter<=m;counter++){ if(next(a)){ if(counter==m){ unset(search(prev(a),a),a); } }else{ reset(a); if(counter==m){ unset(search(end(a),a),a); reset(a); } } } } returncurrent(a); } alert("猴子大王的编号为:"+getKingMonkey(100,17));
希望本文所述对大家的javascript程序设计有所帮助。