首页 > 编程 > JavaScript > 正文

JavaScript使用指针操作实现约瑟夫问题实例

2019-11-20 12:44:45
字体:
来源:转载
供稿:网友

本文实例讲述了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 函数,将数组内部指针下移一位//如果已经指向最后一个元素则返回 FALSEvar 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 函数,将数组内部指针上移一位//如果已经指向第一个元素则返回 FALSEvar 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 只猴子,数到 mfunction 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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表