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一些不错的函数脚本代码
Sep 10 Javascript
Javascript String对象扩展HTML编码和解码的方法
Jun 02 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
js+css在交互上的应用
Jul 18 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
Apr 11 Javascript
一个jquery实现的不错的多行文字图片滚动效果
Sep 28 Javascript
JavaScript中实现依赖注入的思路分享
Jan 15 Javascript
jQuery消息提示框插件Tipso
May 04 Javascript
jQuery实现带玻璃流光质感的手风琴特效
Nov 20 Javascript
jQuery实现宽屏图片轮播实例教程
Nov 24 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 Javascript
在Vue中使用Select选择器拼接label的操作
Oct 22 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 ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
python轻松查到删除自己的微信好友
2016/01/10 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
python针对excel的操作技巧
2018/03/13 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
Python代码注释规范代码实例解析
2020/08/14 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
《晏子使楚》教学反思
2014/02/08 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
消防志愿者活动方案
2014/08/23 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
详解MySQL中的主键与事务
2021/05/27 MySQL
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
小程序实现侧滑删除功能
2022/06/25 Javascript