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 相关文章推荐
extjs_02_grid显示本地数据、显示跨域数据
Jun 23 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
js中this的用法实例分析
Jan 10 Javascript
基于Node的React图片上传组件实现实例代码
May 10 Javascript
VUE中v-model和v-for指令详解
Jun 23 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 Javascript
JS实现移动端整屏滑动的实例代码
Nov 10 Javascript
vue2.0学习之axios的封装与vuex介绍
May 28 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
Jan 21 Javascript
微信小程序 如何保持登录状态
Aug 16 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 29 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 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
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
ucenter通信原理分析
2015/01/09 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python实现马耳可夫链算法实例分析
2015/05/20 Python
python简单实现旋转图片的方法
2015/05/30 Python
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
python 日志 logging模块详细解析
2020/03/31 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
如何提高MySql的安全性
2014/06/19 面试题
医院检讨书范文
2014/02/01 职场文书
工地安全标语
2014/06/07 职场文书
市场营销工作计划书
2014/09/15 职场文书
python自动化测试之Selenium详解
2022/03/13 Python