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 封装Ajax传递的数据代码
Jun 05 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
Jun 23 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
May 04 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
JavaScript学习笔记之Cookie对象
Jan 22 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
May 02 Javascript
vue proxyTable 接口跨域请求调试的示例
Sep 12 Javascript
Vue.js自定义事件的表单输入组件方法
Mar 08 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
Sep 10 Javascript
Vue3 Composition API的使用简介
Mar 29 Vue.js
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
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python 实现控制鼠标键盘
2020/11/27 Python
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
会话Bean的种类
2013/11/07 面试题
员工自我鉴定
2013/10/09 职场文书
中专毕业自我鉴定
2013/10/16 职场文书
银行求职推荐信范文
2013/11/30 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
开国大典观后感
2015/06/04 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS