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 相关文章推荐
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
基于jQuery选择器的整理集合
Apr 26 Javascript
js获取内联样式的方法
Jan 27 Javascript
基于jQuery实现在线选座之高铁版
Aug 24 Javascript
JavaScript中数组的合并以及排序实现示例
Oct 24 Javascript
jQuery+CSS3实现3D立方体旋转效果
Nov 10 Javascript
jQuery simpleModal插件的使用介绍
Aug 30 Javascript
vue-router 权限控制的示例代码
Sep 21 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
Mar 26 Javascript
详解Vuex下Store的模块化拆分实践
Jul 31 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
May 26 Javascript
vue实现防抖的实例代码
Jan 11 Vue.js
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
Window下PHP三种运行方式图文详解
2013/06/11 PHP
php中文验证码实现示例分享
2014/01/12 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
如何定义TensorFlow输入节点
2020/01/23 Python
区分python中的进程与线程
2020/08/13 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
酒店公关部经理岗位职责
2013/11/24 职场文书
电台实习生求职信
2014/02/25 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
2014年小学工作总结
2014/11/26 职场文书
化验室岗位职责
2015/02/14 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
运动会加油稿
2015/07/22 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL