O exemplo neste artigo descreve como Java usa uma estrutura de lista vinculada circular para resolver o problema de Joseph. Compartilhe com todos para sua referência. A análise específica é a seguinte:
Esta é a primeira questão do exame Java. Para alunos que nunca viram uma lista vinculada, eles não saberão como fazê-lo. Olhando para trás agora, não é realmente difícil.
Pergunta de José:
Existem n pessoas, cujos números são 1, 2, 3,..., n. Essas n pessoas estão dispostas em círculo em ordem. Agora, dados s e d, comece a contar a partir de 1 em ordem a partir da sésima pessoa, e a pessoa que conta até d sairá da fila, e então comece a contar a partir da próxima pessoa e comece a partir de 1 em ordem, e a pessoa que contagens até d sairão da fila novamente. Este ciclo continua até que todos finalmente saiam. É necessário definir uma classe de nó e usar uma estrutura de lista vinculada circular para resolver o problema de Joseph.
A seguinte versão java da resposta:
Copie o código da seguinte forma: import java.util.Scanner;
public class LinkNode { //classe de nó da lista vinculada unidirecional
public int data; //Valor do nó de armazenamento
public LinkNode next; //Referência de armazenamento do valor do nó
public LinkNode(int k){ //Método de construção, nó com valor k
dados =k;
próximo = nulo;
}
}
classe Josefo{
public static void printJosephus(int n,int s,int d){
int i=1; //Cria uma lista circular de comprimento n
LinkNode q,cauda;
Cabeça do LinkNode = novo LinkNode(i);
cabeça.próximo = cabeça;
tail = head; //O primeiro nó, a cauda e a cabeça estão juntos
enquanto(eu<n){
eu++;
q = new LinkNode(i); //Adiciona um novo nó
q.next = head; //A referência do nó aponta para o head;
tail.next = q; //A referência do último elemento aponta para q;
tail = q; //Então o último elemento é q
}
int j= 0; //Começa a contar a partir de s e exibe o número da fila em sequência.
LinkNode p = head; //Ponto inicial da contagem
enquanto(j<s-1){
j++;
p = p.próximo;
}
enquanto(p.próximo != p){
j = 1;
while(j<d-1) //Ponto inicial da contagem
{
j++;
p = p.próximo;
}
System.out.print(p.next.data + " "); // Gera o número do nó retirado da fila
p.próximo = p.próximo.próximo;
p = p.next; //Aponta continuamente para o próximo nó
}
System.out.print(p.dados);
}
public static void main(String[] args) {
Entrada do scanner = novo Scanner(System.in);
int n = input.nextInt();
int a = input.nextInt();
int b = input.nextInt();
Josefo.printJosefo(n, a, b);
}
}
Espero que este artigo seja útil para a programação Java de todos.