1。はじめに
ジョセフの問題(ジョセフの順列と呼ばれることもありますが、コンピューターサイエンスと数学に登場する問題です。コンピュータープログラミングアルゴリズムでは、同様の問題はジョセフリングとも呼ばれます。
例:
レンは個人的にサークルを形成し、ハンカチを投げるゲームをプレイしました。 Kthの人から始めて、1からカウントします。Mがカウントされると、Mをカウントする人は、円に1人しか残っていないまで円を終了します。
問題分析とアルゴリズムの設計
ジョセフの問題は難しくありませんが、多くの解決策があります。質問には多くのバリエーションがあります。これが実装の方法です。
質問では、レンの個人は円に囲まれており、それを表すために円形のチェーンを使用するように促します。構造配列を使用して、円形チェーンを形成できます。構造には2人のメンバーがいます。1つは最初の子供を指すヘッドノードで、もう1つは判断としてのノードの温度(サポートロールの演奏を担当)です。
特定のコードは次のとおりです。
パッケージdemo11;/** *ジョセフの問題はハンカチに変わりました * * @author tianqアイデア:子どものクラスを作成し、ループリストクラスのcycllink */public class demo11 {public static void main(string [] args){cycllink cyclink = new cycllink(); cyclink.setlen(15); cyclink.createlink(); cyclink.setk(2); cyclink.setm(2); cyclink.show(); cyclink.play();} //チャイルドクラスの子供を作成する{//子供idthis.no = no;}} class cycllink {//リンクリストの最初の子供への参照を定義します最初の子{this.m = m;} //リンクリストのサイズを設定しますpublic void setlen(int len){this.len = len;} // public void setk(int k)(this.k = k k; i ++){temp.nextchild;} while(this.len!= 1){//2。countm for(int j = 1; j ++){temp = temp.nextchild;} temp2.nextchild;} // 3。mに数えられる子供をexit、temp2.nextchild = temp.nextchild; // temp = temp.nextchild; // this.show()を数える次の子供にtempを指しさせます。 this.len - ;} //最後の子system.out.println( "last out of the circle"+temp.no);} //リングリンクリストの初期化public void createelink(){for(int i = 1; i <= len; i ++){if(i == 1){// create first child ch = new child(i); this.firstchild = ch; this.temp = ch;} else {if(i == len){//最初の子供ch = new child(i); temp.nextchild = ch; emp.nextchild = this.firstchild;} else {// emp = chird ch = new child ch; emp.nextchild(i); ch;}}}}} //リングリンクリストを印刷しますpublic void show(){child temp = this.firstchild; do {system.out.print(temp.no + ""); temp = temp.nextchild;} while(temp!= this.firstchild);}}}結果:
要約します
上記は、JavaプログラミングにおけるJoseph問題の例の例に関するこの記事のすべての内容であり、誰にとっても役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!