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 相关文章推荐
JS中剪贴板兼容性、判断复制成功或失败
Mar 09 Javascript
JavaScript的document对象和window对象详解
Dec 30 Javascript
ie下jquery.getJSON的缓存问题的处理方法
Mar 29 Javascript
图片Slider 带左右按钮的js示例
Aug 30 Javascript
javascript实现数字倒计时特效
Mar 30 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
基于Marquee.js插件实现的跑马灯效果示例
Jan 25 Javascript
vue如何引用其他组件(css和js)
Apr 13 Javascript
vue favicon设置以及动态修改favicon的方法
Dec 21 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
使用layui的router来进行传参的实现方法
Sep 06 Javascript
jQuery实现小火箭返回顶部特效
Feb 03 jQuery
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分页显示制作详细讲解
2006/10/09 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
Three.js基础部分学习
2017/01/08 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
python开发入门——列表生成式
2020/09/03 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
python中实现栈的三种方法
2020/12/19 Python
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
Ajax和javascript的区别
2013/07/20 面试题
物业公司采购员岗位职责
2013/12/31 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
城管个人总结
2015/02/28 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server