Задача Иосифа Флавия - C#
Формулировка задачи:
Решил попробовать сделать,через словарь. Затруднение в том,как убирать,каждый k-ый.
Вокруг считающего стоят n человек, один из которых назван первым, а остальные
занумерованы против часовой стрелки числами от 2 до n. Считающий ведет счет до k,
начиная с первого. Счет продолжается со следующего человека (при этом выбывшие из круга не считаются),
и так до тех пор, пока не останется один человек. Требуется определить начальный номер этого человека.
using System;
using System.Linq;
using System.Collections.Generic;
class Player
{
public static Dictionary<int, string> MyDic(int n)
{
Dictionary<int, string> dic = new Dictionary<int, string>();
Console.WriteLine("Введите имя : \n");
string s;
for (int j = 1; j <= n; j++)
{
Console.Write("Имя{0} --> ", j);
s = Console.ReadLine();
dic.Add(j, s);
}
return dic;
}
}
class Program
{
public static void Main()
{
Console.Write("Сколько игроков добавить?");
int n = int.Parse(Console.ReadLine());
Dictionary<int, string> dic = Player.MyDic(n);
Console.Write("До какого считать?");
int k = int.Parse(Console.ReadLine());
ICollection<int> keys = dic.Keys;
while (keys.Count != 1)
{
for (int i = 1; i <= k; ++i)
{
if(i == k)
{
dic.Remove(i);//тут проблема :/
}
}
}
foreach (int i in keys)
{
Console.Write("Остался:" + dic[i]);
}
}
}
Нус,если что проблема,в том,что больше ключа с k-ым номером нету,т.к. я его удалил. Вооот не знаю,как выйти из положения
Решение задачи: «Задача Иосифа Флавия»
textual
Листинг программы
using System;
using System.Collections.Generic;
class Program
{
public static void Main()
{
Queue<string> que = new Queue<string>("Abigail Benjamin Charlotte Daniel Emma Fred Grace Henry Isabella Jayden Kimberly Liam Mia Nicholas Olivia Paul Quilla Ryan Sofia Tyler Unity Vernon Waleis Xandra Yrre Zinnia".Split());
int k = Int32.Parse(Console.ReadLine());
while (que.Count != 1)
{
for (int i = k - 1; i > 0; --i)
{
que.Enqueue(que.Dequeue());
}
que.Dequeue();
}
Console.WriteLine(que.Dequeue());
}
}