Задача Иосифа Флавиля. Решение с использованием коллекции - C#

Узнай цену своей работы

Формулировка задачи:

Есть задача, наверняка многие ее уже решали. Так вот, хочу узнать оптимальность решения. У меня есть два решения, хочу понять, какое из них оптимальнее и почему. Самое главное - это почему! Вот условие:
В кругу стоят N человек, пронумерованных от 1 до N. При ведении счета по кругу вычёркивается каждый второй человек, пока не останется один. Составить программу, моделирующую процесс.
Вот мои решения:
 int[] listPerson = new int[11] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
 
            LinkedList<int> list = new LinkedList<int>(listPerson);
            var currentPerson = list.First;
 
            while (list.Count != 1)
            {
                list.Remove(currentPerson.Next ?? list.First);
                currentPerson = currentPerson.Next ?? list.First;
            }
 
            //-----------------------------------------------------------------------------------
 
            ArrayList array = new ArrayList(listPerson);
            int i = 1;
 
            while (array.Count != 1)
            {
                array.RemoveAt(i);
                ++i;
 
                if (i > array.Count) { i = 1; }
                if (i == array.Count) { i = 0; }
                
            }
В первом - LinkedList, а во втором ArrayList. Хотелось бы вашего мнения. Или, может, я вообще неправильные коллекции выбрал для решения этой задачи? P.S. Только не говорите, что здесь нужно использовать Queue или Stack. Ума не приложу, как с их помощью решить ее.
Никаких идей нет?

Решение задачи: «Задача Иосифа Флавиля. Решение с использованием коллекции»

textual
Листинг программы
            int[] listPerson = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            Queue<int> list = new Queue<int>(listPerson);
 
            while (list.Count != 1)
            { 
                list.Enqueue(list.Dequeue());
                list.Dequeue();
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 5 из 5
Похожие ответы