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字符串处理性能的代码
Dec 07 Javascript
JS模拟面向对象全解(二、类型与赋值)
Jul 13 Javascript
JQuery教学之性能优化
May 14 Javascript
angularjs实现与服务器交互分享
Jun 24 Javascript
JavaScript图片轮播代码分享
Jul 31 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
Jan 14 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
Javascript缓存API
Jun 14 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
Sep 20 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
Feb 08 Javascript
vue-router之nuxt动态路由设置的两种方法小结
Sep 26 Javascript
Javascript读写cookie的实例源码
Mar 16 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
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
php生成微信红包数组的方法
2019/09/05 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
JavaScript中的作用域链和闭包
2012/06/30 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
生成二维码方法汇总
2014/12/26 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
大四自我鉴定范文
2013/10/06 职场文书
医药大学生求职简历的自我评价
2013/10/17 职场文书
高级电工工作职责
2013/11/21 职场文书
高三英语教学反思
2014/01/13 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
2014年后勤工作总结
2014/11/18 职场文书
神龙架导游词
2015/02/11 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android