[JavaScript] JavaScript通过指针操作实现约瑟夫问题 →→→→→进入此内容的聊天室

来自 , 2019-12-22, 写在 JavaScript, 查看 94 次.
URL http://www.code666.cn/view/c54bc2de
  1. Array.prototype.pointer = 0;//模拟数组内部指针
  2. //Reset 函数,将数组内部指针归位(指向第一个元素)
  3. var reset = function(arrayObj){
  4.     if(!(arrayObj instanceof Array)){
  5.         alert("Reset() 函数参数类型错误!请检查输入!");
  6.         return;
  7.     }
  8.     arrayObj.pointer = 0;
  9. }
  10. //Current 函数,返回数组内部指针指向的当前元素
  11. var current = function(arrayObj){
  12.     if(!(arrayObj instanceof Array)){
  13.         alert("Current() 函数参数类型错误!请检查输入!");
  14.         return;
  15.     }
  16.     return arrayObj[arrayObj.pointer];
  17. }
  18. //End 函数,将数组内部指针指向最后一个元素
  19. var end = function(arrayObj){
  20.     if(!(arrayObj instanceof Array)){
  21.         alert("End() 函数参数类型错误!请检查输入!");
  22.         return;
  23.     }
  24.     arrayObj.pointer = arrayObj.length - 1;
  25.     return arrayObj[arrayObj.pointer];
  26. }
  27. //Next 函数,将数组内部指针下移一位,如果已经指向最后一个元素则返回 FALSE
  28. var next = function(arrayObj){
  29.     if(!(arrayObj instanceof Array)){
  30.         alert("Next() 函数参数类型错误!请检查输入!");
  31.         return;
  32.     }
  33.     arrayObj.pointer ++;
  34.     if(typeof arrayObj[arrayObj.pointer] == 'undefined'){
  35.         arrayObj.pointer --;
  36.         return false;
  37.     }
  38.     return true;
  39. }
  40. //Prev 函数,将数组内部指针上移一位,如果已经指向第一个元素则返回 FALSE
  41. var prev = function(arrayObj){
  42.     if(!(arrayObj instanceof Array)){
  43.         alert("Prev() 函数参数类型错误!请检查输入!");
  44.         return;
  45.     }
  46.     arrayObj.pointer --;
  47.     if(typeof arrayObj[arrayObj.pointer] == 'undefined'){
  48.         arrayObj.pointer ++;
  49.         return false;
  50.     }
  51.     return arrayObj[arrayObj.pointer];
  52. }
  53. //Unset  函数,删除指定的数组元素
  54. var unset = function(index, arrayObj){
  55.     if(!(arrayObj instanceof Array)){
  56.         alert("Unset() 函数参数类型错误!请检查输入!");
  57.         return;
  58.     }
  59.     if(typeof arrayObj[index] == 'undefined'){
  60.         alert("Unset() 函数参数 index 错误!不存在此元素!");
  61.         return false;
  62.     }
  63.     arrayObj.splice(index, 1);
  64.     return true;
  65. }
  66. //Search 函数,通过数组键值返回数组的键名
  67. var search = function(value, arrayObj){
  68.     if(!(arrayObj instanceof Array)){
  69.         alert("Search() 函数参数类型错误!请检查输入!");
  70.         return;
  71.     }
  72.     for(index in arrayObj){
  73.         if(arrayObj[index] == value){
  74.             return index;
  75.         }
  76.     }
  77.     return false;
  78. }
  79. //getKingMonkey 函数,我们的约瑟夫主函数,n 只猴子,数到 m
  80. function getKingMonkey(n, m){
  81.     a = new Array();
  82.     for(i = 1; i <= n; i ++){
  83.         a[i] = i;
  84.     }
  85.     a[0] = 0;unset(0, a);reset(a);
  86.     while(a.length > 1){
  87.         for(counter = 1; counter <= m; counter ++){
  88.             if(next(a)){
  89.                 if(counter == m){
  90.                     unset(search(prev(a), a), a);
  91.                 }
  92.             }else{
  93.                 reset(a);
  94.                 if(counter == m){
  95.                     unset(search(end(a), a), a);
  96.                     reset(a);
  97.                 }
  98.             }
  99.         }
  100.     }
  101.     return current(a);
  102. }
  103. alert("猴子大王的编号为:" + getKingMonkey(100, 17));
  104. //javascript/7181

回复 "JavaScript通过指针操作实现约瑟夫问题"

这儿你可以回复上面这条便签

captcha