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 相关文章推荐
Prototype源码浅析 String部分(二)
Jan 16 Javascript
使用js在页面中绘制表格核心代码
Sep 16 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
jQuery事件绑定on()与弹窗实现代码
Apr 28 Javascript
JQuery 的跨域方法推荐_可跨任何网站
May 18 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
jquery PrintArea 实现票据的套打功能(代码)
Mar 17 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
Aug 28 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
Mar 02 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
Aug 17 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
May 07 Javascript
在vue中根据光标的显示与消失实现下拉列表
Sep 29 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
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
PHP 裁剪图片
2021/03/09 PHP
mailto的使用技巧分享
2012/12/21 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
有关Python的22个编程技巧
2018/08/29 Python
python爬虫之自制英汉字典
2019/06/24 Python
超简单的Python HTTP服务
2019/07/22 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
学习Python列表的基础知识汇总
2020/03/10 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
2020/07/01 Python
如何利用python发送邮件
2020/09/26 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
房地产促销活动方案
2014/03/01 职场文书
保护环境建议书
2014/03/12 职场文书
党章学习心得体会2016
2016/01/14 职场文书
公历12个月名称的由来
2022/04/12 杂记
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技