Считалочка с использованием списка - C#
Формулировка задачи:
«Считалка». N ребят стоят по кругу. Начав отсчет от первого, удаляют каждого К-го, смыкая круг после каждого удаления. Определить, кто остался последним.
удаляет элемент,начиная с 0 индекса. Т.е. нужно удалить сначала третий элемент,а потом пятый и получается вот:
1 2 4 5 6 7 8 9 10 //удалился 3 элемент,начиная от начала.
1 2 4 5 7 8 9 10 // удалился 5 элемент,опять с начального элемента.
а нужно,чтоб удалялось с выбранного предыдущего элемента,т.е
1 2 4 5 6 7 8 9 10 //удалился 3 элемент,начиная от начала.
1 2 4 5 6 7 8 10 // удалился 5 элемент,начиная от четверки
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Задайте количество в кругу");
int N = Convert.ToInt32(Console.ReadLine());
int K;
List<int> Players = new List<int>(N);
for (int i = 0; i <=(N-1); i++)
{
Players.Insert(i, (i + 1));
}
for (int i = 0; i <= Players.Count+1; i++)
{
Console.WriteLine();
Console.WriteLine("Введите номер игрока,которого будете удалять");
K = Convert.ToInt32(Console.ReadLine());
K--;
if (K < Players.Count)
{
Players.RemoveAt(K);
}
else
{
Console.WriteLine("Этот игрок уже удален");
i--;
}
Console.WriteLine("Оставшиеся");
foreach (int j in Players)
{
Console.Write(j + " ");
}
}
Console.ReadLine();
}
}Решение задачи: «Считалочка с использованием списка»
textual
Листинг программы
using System;
using System.Linq;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
int n = 10;
int k = 3;
var ring = new List<int>(Enumerable.Range(1, n));
for (var ki = --k; ring.Count != 1; ki = (ki + k) % ring.Count)
ring.RemoveAt(ki);
Console.WriteLine(ring[0]);
}
}