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 相关文章推荐
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
扩展JavaScript功能的正确方法(译文)
Apr 12 Javascript
JQuery判断HTML元素是否存在的两种解决方法
Dec 26 Javascript
JQuery中两个ul标签的li互相移动实现方法
May 18 Javascript
图解prototype、proto和constructor的三角关系
Jul 31 Javascript
Three.js的使用及绘制基础3D图形详解
Apr 27 Javascript
seajs模块压缩问题与解决方法实例分析
Oct 10 Javascript
微信小程序基础教程之worker线程的使用方法
Jul 15 Javascript
详解json串反转义(消除反斜杠)
Aug 12 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 Javascript
npm全局环境变量配置详解
Dec 15 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
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
Java提供了哪些企业应用编程接口
2015/02/13 面试题
大三自我鉴定范文
2013/10/05 职场文书
会计找工作求职信范文
2013/12/09 职场文书
校园网站的创业计划书范文
2013/12/30 职场文书
公司演讲稿开场白
2014/08/25 职场文书
2014年统战工作总结
2014/12/09 职场文书
老公出轨后的保证书
2015/05/08 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android