ホームページ ウェブフロントエンド jsチュートリアル JavaScript はポインタ操作を使用して Joseph の問題を実装します。

JavaScript はポインタ操作を使用して Joseph の問題を実装します。

May 16, 2016 pm 04:05 PM
javascript ポインタ

この記事の例では、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 プログラミング設計に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang では、ジェネリック関数はポインターと参照型をどのように処理しますか? Golang では、ジェネリック関数はポインターと参照型をどのように処理しますか? Apr 16, 2024 pm 04:06 PM

Golang では、ジェネリック関数はポインターと参照型をどのように処理しますか?

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法

C++ 参照とポインター パラメーターの受け渡しを使用するにはどうすればよいですか? C++ 参照とポインター パラメーターの受け渡しを使用するにはどうすればよいですか? Apr 12, 2024 pm 10:21 PM

C++ 参照とポインター パラメーターの受け渡しを使用するにはどうすればよいですか?

プログラミングスキルを向上させる高度な Golang ポインタ型メソッド プログラミングスキルを向上させる高度な Golang ポインタ型メソッド Apr 07, 2024 pm 06:42 PM

プログラミングスキルを向上させる高度な Golang ポインタ型メソッド

C++ でのポインターと参照の詳細な分析によるメモリ使用量の最適化 C++ でのポインターと参照の詳細な分析によるメモリ使用量の最適化 Jun 02, 2024 pm 07:50 PM

C++ でのポインターと参照の詳細な分析によるメモリ使用量の最適化

Go 言語の参照型についての深い理解 Go 言語の参照型についての深い理解 Feb 21, 2024 pm 11:36 PM

Go 言語の参照型についての深い理解

golangでポインタを返すにはどうすればよいですか? golangでポインタを返すにはどうすればよいですか? Apr 23, 2024 pm 02:09 PM

golangでポインタを返すにはどうすればよいですか?

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを簡単に取得する方法

See all articles