VadimThink

Жава норм работает

Apr 18th, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.59 KB | None | 0 0
  1. package com.Main;
  2.  
  3. import java.lang.*;
  4. import java.util.Scanner;
  5.  
  6. class Main {
  7.     static Node insert(Node head, int data) {
  8.         Node current = head;
  9.         Node newNode = new Node();
  10.         newNode.data = data;
  11.         if (head == null) {
  12.             newNode.next = newNode;
  13.             head = newNode;
  14.         } else {
  15.             while (current.next != head) {
  16.                 current = current.next;
  17.             }
  18.             newNode.next = head;
  19.             current.next = newNode;
  20.         }
  21.         return head;
  22.     }
  23.  
  24.     static void writeList(Node head) {
  25.         Node current = head;
  26.         if (findLength(head) == 1) {
  27.             System.out.print("Номер последнего: " + head.data);
  28.         } else {
  29.             System.out.print("Список на данный момент: ");
  30.             do {
  31.                 System.out.print(current.data + " ");
  32.                 current = current.next;
  33.             } while (current != head);
  34.             System.out.println();
  35.         }
  36.     }
  37.  
  38.  
  39.     static int findLength(Node head) {
  40.         Node current = head;
  41.         int count = 0;
  42.         if (head != null) {
  43.             do {
  44.                 current = current.next;
  45.                 count++;
  46.             } while (current != head);
  47.         }
  48.         return count;
  49.     }
  50.  
  51.     static Node deleteFirst(Node head) {
  52.         Node previous = head, next = head;
  53.         while (previous.next != head) {
  54.             previous = previous.next;
  55.             next = previous.next;
  56.         }
  57.         System.out.println("Был удалён из круга номер " + head.data);
  58.         previous.next = next.next;
  59.         head = previous.next;
  60.         return head;
  61.     }
  62.  
  63.     static Node deleteAtPosition(Node head, int index, int length) {
  64.         int count = 1;
  65.         Node previous = head, next = head.next;
  66.         if (index == 0) {
  67.             head = deleteFirst(head);
  68.             return head;
  69.         } else {
  70.             while (length > 0) {
  71.                 if (count == index) {
  72.                     previous.next = next.next;
  73.                     System.out.println("Был удалён из круга номер " + next.data);
  74.                 }
  75.                 previous = previous.next;
  76.                 next = previous.next;
  77.                 length--;
  78.                 count++;
  79.             }
  80.             return head;
  81.         }
  82.     }
  83.  
  84.     public static int findIndex(int length, int number) {
  85.         int index = -1;
  86.         int count = 0;
  87.         length--;
  88.         while (count != number) {
  89.             index++;
  90.             if (index > length) {
  91.                 index = 0;
  92.             }
  93.             count++;
  94.         }
  95.         return index;
  96.     }
  97.  
  98.     public static void removeGuys(Node head, int length, int m) {
  99.         while (length > 1) {
  100.             int index = findIndex(length, m);
  101.             head = deleteAtPosition(head, index, length);
  102.             writeList(head);
  103.             length--;
  104.         }
  105.     }
  106.  
  107.     public static int readNumber() {
  108.         boolean isCorrect;
  109.         int length = 0;
  110.         Scanner in = new Scanner(System.in);
  111.         do {
  112.             isCorrect = false;
  113.             try {
  114.                 length = in.nextInt();
  115.                 if (length < 2 || length > 10) {
  116.                     System.out.println("Число должно быть больше единицы и меньше 11");
  117.                     isCorrect = true;
  118.                 }
  119.             } catch (Exception e) {
  120.                 System.out.println("Неверный ввод!");
  121.                 isCorrect = true;
  122.                 in.nextLine();
  123.             }
  124.         } while (isCorrect);
  125.         return length;
  126.     }
  127.  
  128.     public static Node fillList(Node head, int length) {
  129.         length++;
  130.         for (int i = 1; i < length; i++) {
  131.             head = insert(head, i);
  132.         }
  133.         return head;
  134.     }
  135.  
  136.     public static void writeTip(int number) {
  137.         switch (number) {
  138.             case 1:
  139.                 System.out.println("N ребят встали в круг. Каждый раз, начиная с первого, из круга выводится каждый M-й");
  140.                 break;
  141.             case 2:
  142.                 System.out.println("Сколько человек находится в кругу?");
  143.                 break;
  144.             case 3:
  145.                 System.out.println("Введите M");
  146.                 break;
  147.         }
  148.     }
  149.  
  150.     public static void main(String[] args) {
  151.         writeTip(1);
  152.         Node head = null;
  153.         writeTip(2);
  154.         int length = readNumber();
  155.         writeTip(3);
  156.         int m = readNumber();
  157.         head = fillList(head, length);
  158.         writeList(head);
  159.         removeGuys(head, length, m);
  160.     }
  161. }
Add Comment
Please, Sign In to add comment