using System;
using System.Linq;
class Program
{
static void Main()
{
Console.WriteLine(GetLastStanding(11, 4));
}
static int GetLastStanding(int n, int step)
{
var items = Enumerable.Range(0, n)
.Select(position => new Item { Position = position }).ToArray();
var i = 0;
var stepCounter = 0;
var nCounter = n;
while (nCounter > 1)
{
if (!items[i].Marked && ++stepCounter == step)
{
stepCounter = 0;
items[i].Marked = true;
--nCounter;
Console.WriteLine(string.Join(", ",
items.Select(item => item.Marked ?
"_" : (item.Position + 1).ToString())));
}
i = (i + 1) % n;
}
return items.Single(item => !item.Marked).Position;
}
struct Item
{
public int Position;
public bool Marked;
}
}
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; }
}
using System;
using System.Collections.Generic;
using System.Linq;
namespace throughOneKill
{
class Program
{
static void Main(string[] args)
{
int N = 10;
var list = new LinkedList<int>(Enumerable.Range(1, N));
Console.WriteLine(string.Join(" ", list));
var currentItem = list.First;
while (list.Count != 1)
{
list.Remove(currentItem.Next ?? list.First);
currentItem = currentItem.Next ?? list.First;
}
Console.WriteLine(list.First.Value);
Console.ReadKey();
}
}
}
var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
PrintList(list);
bool delete = false;
while (list.Count > 1)
{
for (int i = 0; i < list.Count; i++)
{
if (delete) list.RemoveAt(i--);
delete = !delete;
}
PrintList(list);
}
Console.Read();
static void PrintList(IEnumerable<int> list)
{
foreach (var item in list)
Console.Write("{0} ", item);
Console.WriteLine();
}