Задача Иосифа Флавия - C#

Узнай цену своей работы

Формулировка задачи:

Решил попробовать сделать,через словарь. Затруднение в том,как убирать,каждый k-ый. Вокруг считающего стоят n человек, один из которых назван первым, а остальные занумерованы против часовой стрелки числами от 2 до n. Считающий ведет счет до k, начиная с первого. Счет продолжается со следующего человека (при этом выбывшие из круга не считаются), и так до тех пор, пока не останется один человек. Требуется определить начальный номер этого человека.
Листинг программы
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. class Player
  5. {
  6. public static Dictionary<int, string> MyDic(int n)
  7. {
  8. Dictionary<int, string> dic = new Dictionary<int, string>();
  9. Console.WriteLine("Введите имя : \n");
  10. string s;
  11. for (int j = 1; j <= n; j++)
  12. {
  13. Console.Write("Имя{0} --> ", j);
  14. s = Console.ReadLine();
  15. dic.Add(j, s);
  16. }
  17. return dic;
  18. }
  19. }
  20.  
  21. class Program
  22. {
  23. public static void Main()
  24. {
  25. Console.Write("Сколько игроков добавить?");
  26. int n = int.Parse(Console.ReadLine());
  27. Dictionary<int, string> dic = Player.MyDic(n);
  28. Console.Write("До какого считать?");
  29. int k = int.Parse(Console.ReadLine());
  30. ICollection<int> keys = dic.Keys;
  31. while (keys.Count != 1)
  32. {
  33. for (int i = 1; i <= k; ++i)
  34. {
  35. if(i == k)
  36. {
  37. dic.Remove(i);//тут проблема :/
  38. }
  39. }
  40. }
  41. foreach (int i in keys)
  42. {
  43. Console.Write("Остался:" + dic[i]);
  44. }
  45. }
  46. }
Нус,если что проблема,в том,что больше ключа с k-ым номером нету,т.к. я его удалил. Вооот не знаю,как выйти из положения

Решение задачи: «Задача Иосифа Флавия»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class Program
  5. {
  6.     public static void Main()
  7.     {
  8.         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());
  9.         int k = Int32.Parse(Console.ReadLine());
  10.         while (que.Count != 1)
  11.         {
  12.             for (int i = k - 1; i > 0; --i)
  13.             {
  14.                 que.Enqueue(que.Dequeue());
  15.             }
  16.             que.Dequeue();
  17.         }
  18.         Console.WriteLine(que.Dequeue());
  19.     }
  20. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

13   голосов , оценка 4.385 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы