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 相关文章推荐
IE和Mozilla的兼容性汇总event
Aug 12 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
Apr 07 Javascript
Window.Open如何在同一个标签页打开
Jun 20 Javascript
浅析jQuery EasyUI中的tree使用指南
Dec 18 Javascript
JS代码实现table数据分页效果
May 26 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
react-router实现跳转传值的方法示例
May 27 Javascript
vue组件父与子通信详解(一)
Nov 07 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 Javascript
css配合JavaScript实现tab标签切换效果
Oct 11 Javascript
layer 刷新某个页面的实现方法
Sep 05 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
改造一台复古桌面收音机
2021/03/02 无线电
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
php中yii框架实例用法
2020/12/22 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
Javascript函数的参数
2015/07/16 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
复习Python中的字符串知识点
2015/04/14 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
Python中bisect的使用方法
2019/12/31 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
.NET面试问题集
2015/12/08 面试题
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
境外导游求职信
2014/02/27 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
2015年招生工作总结
2015/05/04 职场文书
招商银行工作证明
2015/06/17 职场文书
辞职申请书范本
2019/05/20 职场文书