1. Introdução
O problema de Joseph (às vezes chamado de Permutação de Josephs, é um problema que aparece na ciência da computação e na matemática. Nos algoritmos de programação de computadores, problemas semelhantes também são chamados de Joseph. Também conhecido como "Problema de lançamento do lenço".)
exemplo:
Len, pessoalmente, formou um círculo e jogou o jogo de lençóis. A partir da Kth Pessoa, contando a partir de 1. Quando M é contado, a pessoa que conta m sairá do círculo, até que haja apenas uma pessoa no círculo.
Análise de problemas e design de algoritmo
O problema de Joseph não é difícil, mas existem muitas soluções; Existem muitas variações na questão. Aqui está um método de implementação.
Na questão, os indivíduos len estão cercados por um círculo, o que nos inspira a usar uma corrente circular para representá -la. Podemos usar uma matriz estrutural para formar uma cadeia circular. Existem dois membros na estrutura, um é o nó da cabeça apontando para o primeiro filho, e o outro é a temperatura do nó como julgamento (responsável por desempenhar o papel de apoio).
O código específico é o seguinte:
Pacote Demo11;/** * O problema de Joseph, transformado em um lenço * * @author tianq Idea: Crie uma classe infantil, uma classe de loop list Cycllink */public class Demo11 {public static void main (string [] args) {cycllink ciclink = novo Ciclink (); ciclink.setlen (15); cyclink.createlink (); cyclink.setk (2); ciclink.setm (2); ciclink.show (); ciclink.Play (););}} // cria uma classe infantil {// a criança da criança não é int; criança e idhis.no = no;}} classe cicllink {// define uma referência ao primeiro filho na lista vinculada Primeira criança // A referência ao primeiro filho não pode ser movida Child FirstChild = null; Child temp = Set de Int; {this.m = m;} // Defina o tamanho da lista vinculada public void Setlen (int len) {this.len = len;} // Defina o número de pessoas para contar public void Setk (int k) {this.k = k;} // start playpublic void play () {child temp = this.fir.fir. k; i ++) {temp = temp.nextchild;} while (this.len! temp2.nextChild;} // 3. Saia da criança que conta para m, saia temp2.nextChild = temp.nextChild; // Deixe temp apontar para o próximo filho que conta temp = temp.nextchild; // thisshow (); this.len-;} // o último sistema infantil.out.println ("Last Out of the Circle"+temp.no);} // inicialize a lista de toque link public void createLink () {for (int i = 1; i <= len; i ++) {if (i == 1) {// crie o primeiro filho ch = this.firstChild = ch; this.Temp = ch;} else {if (i == len) {// Crie o primeiro filho filho ch = novo filho (i); temp.nextChild = ch; temp.nextchild = this.firstchild;} else {// continua a criar o filho da criança = novo; CH;}}}} // Imprima a lista ligada ao anel public void show () {Child temp = this.firstChild; do {System.out.print (temp.no + ""); temp = temp.nextChild;} while (temp! = this.firstchild);}}resultado:
Resumir
O exposto acima é todo o conteúdo deste artigo sobre a análise de exemplo do problema de Joseph na programação Java, e espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!