Задача Иосифа Флавиля. Решение с использованием коллекции - C#
Формулировка задачи:
Есть задача, наверняка многие ее уже решали. Так вот, хочу узнать оптимальность решения. У меня есть два решения, хочу понять, какое из них оптимальнее и почему. Самое главное - это почему! Вот условие:
Вот мои решения:
В первом - LinkedList, а во втором ArrayList. Хотелось бы вашего мнения. Или, может, я вообще неправильные коллекции выбрал для решения этой задачи?
P.S. Только не говорите, что здесь нужно использовать Queue или Stack. Ума не приложу, как с их помощью решить ее.
В кругу стоят 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; }
}
Никаких идей нет?
Решение задачи: «Задача Иосифа Флавиля. Решение с использованием коллекции»
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();
}