Задать вопрос
Ответы пользователя по тегу C++
  • Как решить данную задачу?

    lam0x86
    @lam0x86
    Не слушай их всех =)
    Наверняка, преподаватель хочет видеть решение с замкнутым связным списком. Что-то вроде такого:
    class Program
        {
            static void Main()
            {
                var personList = GenerateList(15); // personList указывает на первого человека в списке
    
                PrintList(personList);
    
                var p = personList;
                while (p != p.NextPerson) // пока человек не остался один в списке
                {
                    #region Этот кусок для корректного вывода списка на экран. Если вывод не нужен, можно убрать
                    if (personList == p.NextPerson)
                    {
                        personList = p.NextPerson.NextPerson;
                    }
                    #endregion
    
                    // <ВсяСоль>
                    p = p.NextPerson = p.NextPerson.NextPerson;
                    // </ВсяСоль>
    
                    // Если убрать верхний регион, то может возникнуть ситуация, когда personList указывает на 
                    // человека, который был удалён из списка. Возникнет бесконечный цикл.
                    PrintList(personList);
                }
            }
    
            // Вывод списка на консоль
            private static void PrintList(Person personList)
            {
                var p = personList;
                do
                {
                    System.Console.Out.Write(p.SequenceNumber);
                    System.Console.Out.Write(" ");
                    p = p.NextPerson;
                } while (p != personList);
                System.Console.Out.WriteLine();
            }
    
            // Генерация списка
            private static Person GenerateList(int n)
            {
                // Начинаем с последнего человека
                var currentPerson = new Person(n);
                var lastPerson = currentPerson;
    
                // затем создаём N-1 человек, указывая его порядковый номер и следующего за ним человека
                for (int i = n - 1; i > 0; i--)
                {
                    currentPerson = new Person(i) { NextPerson = currentPerson };
                }
    
                // последнего человека закольцовываем с первым
                lastPerson.NextPerson = currentPerson;
                return currentPerson;
            }
        }
    
        class Person
        {
            public Person(int sequenceNumber)
            {
                SequenceNumber = sequenceNumber;
            }
    
            public int SequenceNumber { get; private set; }
    
            public Person NextPerson { get; set; }
        }
    Ответ написан
    Комментировать