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 相关文章推荐
php与js的区别是什么
Aug 05 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
jquery实现背景墙聚光灯效果示例分享
Mar 02 Javascript
javascript实现日期三级联动下拉框选择菜单
Dec 03 Javascript
React-Native中props具体使用详解
Sep 04 Javascript
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
vue.js 使用axios实现下载功能的示例
Mar 05 Javascript
node.js博客项目开发手记
Mar 16 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
Mar 19 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 16 Javascript
利用 JavaScript 构建命令行应用
Nov 17 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
基于Zookeeper的使用详解
2013/05/02 PHP
PHP 裁剪图片
2021/03/09 PHP
js 动态选中下拉框
2009/11/26 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
一篇不错的Python入门教程
2007/02/08 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Python Selenium截图功能实现代码
2020/04/26 Python
电气自动化自荐信
2013/10/10 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
永远是春天观后感
2015/06/12 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android