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把超出的部分显示为省略号的方法兼容火狐
Jul 23 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
JavaScript实现快速排序的方法
Jul 31 Javascript
每天一篇javascript学习小结(Function对象)
Nov 16 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
Vue.js常用指令汇总(v-if、v-for等)
Nov 03 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
Jan 13 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
Feb 13 Javascript
解决vue 路由变化页面数据不刷新的问题
Mar 13 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
Jan 18 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
Aug 13 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中的加密功能
2006/10/09 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
HTML的select控件美化
2017/03/27 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
微信小程序生成二维码的示例代码
2019/03/29 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
Python调用C++程序的方法详解
2017/01/24 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
计算机软件专业求职信
2014/06/10 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
优秀班主任申报材料
2014/12/16 职场文书
国庆庆典邀请函
2015/02/02 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
毕业生入职感言
2015/07/31 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书