Пример в этой статье описывает, как Java использует циклическую структуру связанного списка для решения проблемы Джозефа. Поделитесь этим со всеми для справки. Конкретный анализ заключается в следующем:
Это первый вопрос экзамена по Java. Для студентов, которые никогда не видели связанный список, они не будут знать, как это сделать. Оглядываясь назад, я понимаю, что это действительно несложно.
Иосиф, вопрос:
Есть n человек, числа которых равны 1, 2, 3,..., n. Эти n человек располагаются в кругу по порядку. Теперь, учитывая s и d, начните считать с 1 по порядку, от s-го человека, и человек, который считает до d, выйдет из очереди, а затем начнет считать со следующего человека и начнет с 1 по порядку, и человек, который числа до d снова выйдут из очереди. Этот цикл продолжается до тех пор, пока все наконец не выйдут. Для решения проблемы Джозефа необходимо определить класс узла и использовать структуру циклического связанного списка.
Следующая Java-версия ответа:
Скопируйте код следующим образом: import java.util.Scanner;
public class LinkNode { //Класс узла одностороннего связанного списка
public int data //значение узла хранения;
public LinkNode next //Ссылка на хранилище значения узла;
public LinkNode(int k){ //Метод построения, узел со значением k
данные = К;
следующий = ноль;
}
}
класс Иосиф Флавий {
public static void printJosephus(int n,int s,int d){
int i=1 //Создаем циклический список длины n
LinkNode q, хвост;
LinkNode head = новый LinkNode(i);
head.next = голова;
Tail = head; //Первый узел, хвост и голова вместе
в то время как (я <n) {
я++;
q = новый LinkNode(i); //Добавляем новый узел
q.next = head; //Ссылка узла указывает на голову
Tail.next = q; //Ссылка последнего элемента указывает на q;
Tail = q //Тогда последний элемент — q;
}
int j= 0; //Начинаем отсчет с s и последовательно выводим номер очереди.
LinkNode p = head; //Начальная точка подсчета
в то время как (j<s-1){
j++;
р = п.следующий;
}
while(p.next != p){
j = 1;
while(j<d-1) //Начальная точка отсчёта
{
j++;
р = п.следующий;
}
System.out.print(p.next.data + " "); // Выводим номер узла, исключенного из очереди
п.следующий = п.следующий.следующий;
p = p.next; // Постоянно указываем на следующий узел
}
System.out.print(p.data);
}
public static void main(String[] args) {
Ввод сканера = новый сканер(System.in);
int n = input.nextInt();
int a = input.nextInt();
int b = input.nextInt();
Josephus.printJosephus(n, a, b);
}
}
Я надеюсь, что эта статья будет полезна каждому, кто занимается программированием на Java.