Задача Иосифа Флавия - 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());
    }
}

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

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