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 相关文章推荐
用javascript操作xml
Nov 04 Javascript
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 Javascript
完美的js图片轮换效果
Feb 05 Javascript
详解JS中的立即执行函数
Feb 24 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
Mar 06 Javascript
详解webpack 多页面/入口支持&amp;公共组件单独打包
Jun 29 Javascript
深入理解vue.js中$watch的oldvalue与newValue
Aug 07 Javascript
vue两个组件间值的传递或修改方式
Jul 04 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
May 08 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
Nov 06 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关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
python实现删除文件与目录的方法
2014/11/10 Python
django模板结构优化的方法
2019/02/28 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
python实现中文文本分句的例子
2019/07/15 Python
python圣诞树编写实例详解
2020/02/13 Python
python中def是做什么的
2020/06/10 Python
python的setattr函数实例用法
2020/12/16 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
《一株紫丁香》教学反思
2014/02/19 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
先进个人总结范文
2015/02/15 职场文书