首页 > 语言 > JavaScript > 正文

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

2024-05-06 16:18:32
字体:大 中 小
来源:转载
供稿:网友

这篇文章主要介绍了JavaScript使用指针操作实现约瑟夫问题,实例分析了javascript模拟数组指针操作的相关技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了JavaScript使用指针操作实现约瑟夫问题的方法。分享给大家供大家参考。具体分析如下:

实现之前当然要自己来编写一些 JS 数组内部指针的操作函数,就像:reset(), current(), next(), prev(), search(), end() 这些函数,我们都要来自己实现,因为 JS 没有内置这些神奇的操作函数

 

 
  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 函数,将数组内部指针下移一位 
  28. //如果已经指向最后一个元素则返回 FALSE 
  29. var next = function(arrayObj){ 
  30. if(!(arrayObj instanceof Array)){ 
  31. alert("Next() 函数参数类型错误!请检查输入!"); 
  32. return; 
  33. } 
  34. arrayObj.pointer ++; 
  35. if(typeof arrayObj[arrayObj.pointer] == 'undefined'){ 
  36. arrayObj.pointer --; 
  37. return false; 
  38. } 
  39. return true; 
  40. } 
  41. //Prev 函数,将数组内部指针上移一位 
  42. //如果已经指向第一个元素则返回 FALSE 
  43. var prev = function(arrayObj){ 
  44. if(!(arrayObj instanceof Array)){ 
  45. alert("Prev() 函数参数类型错误!请检查输入!"); 
  46. return; 
  47. } 
  48. arrayObj.pointer --; 
  49. if(typeof arrayObj[arrayObj.pointer] == 'undefined'){ 
  50. arrayObj.pointer ++; 
  51. return false; 
  52. } 
  53. return arrayObj[arrayObj.pointer]; 
  54. } 
  55. //Unset 函数,删除指定的数组元素 
  56. var unset = function(index, arrayObj){ 
  57. if(!(arrayObj instanceof Array)){ 
  58. alert("Unset() 函数参数类型错误!请检查输入!"); 
  59. return; 
  60. } 
  61. if(typeof arrayObj[index] == 'undefined'){ 
  62. alert("Unset() 函数参数 index 错误!不存在此元素!"); 
  63. return false; 
  64. } 
  65. arrayObj.splice(index, 1); 
  66. return true; 
  67. } 
  68. //Search 函数,通过数组键值返回数组的键名 
  69. var search = function(value, arrayObj){ 
  70. if(!(arrayObj instanceof Array)){ 
  71. alert("Search() 函数参数类型错误!请检查输入!"); 
  72. return; 
  73. } 
  74. for(index in arrayObj){ 
  75. if(arrayObj[index] == value){ 
  76. return index; 
  77. } 
  78. } 
  79. return false; 
  80. } 
  81. //getKingMonkey 函数,我们的约瑟夫主函数,n 只猴子,数到 m 
  82. function getKingMonkey(n, m){ 
  83. a = new Array(); 
  84. for(i = 1; i <= n; i ++){ 
  85. a[i] = i; 
  86. } 
  87. a[0] = 0;unset(0, a);reset(a); 
  88. while(a.length > 1){ 
  89. for(counter = 1; counter <= m; counter ++){ 
  90. if(next(a)){ 
  91. if(counter == m){ 
  92. unset(search(prev(a), a), a); 
  93. } 
  94. }else{ 
  95. reset(a); 
  96. if(counter == m){ 
  97. unset(search(end(a), a), a); 
  98. reset(a); 
  99. } 
  100. } 
  101. } 
  102. } 
  103. return current(a); 
  104. } 
  105. alert("猴子大王的编号为:" + getKingMonkey(100, 17)); 

希望本文所述对大家的javascript程序设计有所帮助。

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

图片精选