JavaScript使用指针操作实现约瑟夫问题实例


Posted in Javascript onApril 07, 2015

本文实例讲述了JavaScript使用指针操作实现约瑟夫问题的方法。分享给大家供大家参考。具体分析如下:

实现之前当然要自己来编写一些 JS 数组内部指针的操作函数,就像:reset(), current(), next(), prev(), search(), end() 这些函数,我们都要来自己实现,因为 JS 没有内置这些神奇的操作函数

Array.prototype.pointer = 0;//模拟数组内部指针
//Reset 函数,将数组内部指针归位(指向第一个元素)
var reset = function(arrayObj){
  if(!(arrayObj instanceof Array)){
    alert("Reset() 函数参数类型错误!请检查输入!");
    return;
  }
  arrayObj.pointer = 0;
}
//Current 函数,返回数组内部指针指向的当前元素
var current = function(arrayObj){
  if(!(arrayObj instanceof Array)){
    alert("Current() 函数参数类型错误!请检查输入!");
    return;
  }
  return arrayObj[arrayObj.pointer];
}
//End 函数,将数组内部指针指向最后一个元素
var end = function(arrayObj){
  if(!(arrayObj instanceof Array)){
    alert("End() 函数参数类型错误!请检查输入!");
    return;
  }
  arrayObj.pointer = arrayObj.length - 1;
  return arrayObj[arrayObj.pointer];
}
//Next 函数,将数组内部指针下移一位
//如果已经指向最后一个元素则返回 FALSE
var next = function(arrayObj){
  if(!(arrayObj instanceof Array)){
    alert("Next() 函数参数类型错误!请检查输入!");
    return;
  }
  arrayObj.pointer ++;
  if(typeof arrayObj[arrayObj.pointer] == 'undefined'){
    arrayObj.pointer --;
    return false;
  }
  return true;
}
//Prev 函数,将数组内部指针上移一位
//如果已经指向第一个元素则返回 FALSE
var prev = function(arrayObj){
  if(!(arrayObj instanceof Array)){
    alert("Prev() 函数参数类型错误!请检查输入!");
    return;
  }
  arrayObj.pointer --;
  if(typeof arrayObj[arrayObj.pointer] == 'undefined'){
    arrayObj.pointer ++;
    return false;
  }
  return arrayObj[arrayObj.pointer];
}
//Unset 函数,删除指定的数组元素
var unset = function(index, arrayObj){
  if(!(arrayObj instanceof Array)){
    alert("Unset() 函数参数类型错误!请检查输入!");
    return;
  }
  if(typeof arrayObj[index] == 'undefined'){
    alert("Unset() 函数参数 index 错误!不存在此元素!");
    return false;
  }
  arrayObj.splice(index, 1);
  return true;
}
//Search 函数,通过数组键值返回数组的键名
var search = function(value, arrayObj){
  if(!(arrayObj instanceof Array)){
    alert("Search() 函数参数类型错误!请检查输入!");
    return;
  }
  for(index in arrayObj){
    if(arrayObj[index] == value){
      return index;
    }
  }
  return false;
}
//getKingMonkey 函数,我们的约瑟夫主函数,n 只猴子,数到 m
function getKingMonkey(n, m){
  a = new Array();
  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);
        }
      }
    }
  }
  return current(a);
}
alert("猴子大王的编号为:" + getKingMonkey(100, 17));

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Javascript自定义函数判断网站访问类型是PC还是移动终端
Jan 10 Javascript
对js关键字命名的疑问介绍
Apr 25 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
jQuery.each使用详解
Jul 07 Javascript
javascript html5 canvas实现可拖动省份的中国地图
Mar 11 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
Oct 11 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
jQuery 防止相同的事件快速重复触发方法
Feb 08 jQuery
vue中子组件调用兄弟组件方法
Jul 06 Javascript
JavaScript设计模式之观察者模式实例详解
Jan 16 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
swiperjs实现导航与tab页的联动
Dec 13 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
Apr 07 #Javascript
JavaScript中字符串分割函数split用法实例
Apr 07 #Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 #Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
Apr 07 #Javascript
JS 作用域与作用域链详解
Apr 07 #Javascript
JavaScript实现在页面间传值的方法
Apr 07 #Javascript
简易的投票系统以及js刷票思路和方法
Apr 07 #Javascript
You might like
第十节--抽象方法和抽象类
2006/11/16 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
php session 预定义数组
2009/03/16 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
iframe 异步加载技术及性能分析
2011/07/19 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
简述vue中的config配置
2018/01/23 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
Django中处理出错页面的方法
2015/07/15 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python正则-re的用法详解
2019/07/28 Python
python模块导入的方法
2019/10/24 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
傲盾软件面试题
2015/08/17 面试题
计算机本科生自荐信
2013/10/15 职场文书
大四学生毕业自荐信
2013/11/07 职场文书
国际商务系学生个人的自我评价
2013/11/26 职场文书
证婚人经典证婚词
2014/01/09 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
导游个人求职信范文
2014/03/23 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
中学生检讨书范文
2014/11/03 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
体育部部长竞选稿
2015/11/21 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技