8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 283
1

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

04.09.2017, 21:16. Показов 4385. Ответов 6

Author24 — интернет-сервис помощи студентам
Решил попробовать сделать,через словарь. Затруднение в том,как убирать,каждый k-ый.

Вокруг считающего стоят n человек, один из которых назван первым, а остальные
занумерованы против часовой стрелки числами от 2 до n. Считающий ведет счет до k,
начиная с первого. Счет продолжается со следующего человека (при этом выбывшие из круга не считаются),
и так до тех пор, пока не останется один человек. Требуется определить начальный номер этого человека.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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]);
        }
     }
}
Добавлено через 39 минут
Нус,если что проблема,в том,что больше ключа с k-ым номером нету,т.к. я его удалил. Вооот не знаю,как выйти из положения
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2017, 21:16
Ответы с готовыми решениями:

Сравните время работы задачи Иосифа Флавия, используя реализацию: а) на массивах; б) на связанных списках
Сравните время работы задачи Иосифа Флавия, используя реализацию: а) на массивах; б) на...

Задача Иосифа Флавиля. Решение с использованием коллекции
Есть задача, наверняка многие ее уже решали. Так вот, хочу узнать оптимальность решения. У меня...

Задача Иосифа Флавия
(Считалка) n детей размещаются по кругу. Начиная отсчет от первого, исключают каждого k-го,...

Задача Иосифа Флавия
Хмм, а что вы думаете о нем и его задаче? Очень интересно Ваше мнение т.к. пишу по этой теме работу

6
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
04.09.2017, 21:32 2
если я правильно понял задачу
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            Console.Write("Сколько игроков добавить?");
            int n = int.Parse(Console.ReadLine());
            var lst = Enumerable.Range(1, n).ToList();
            Console.Write("До какого считать?");
            int k = int.Parse(Console.ReadLine());
            int curNum = 0;
            Console.WriteLine(string.Join(" ", lst));
            while(lst.Count >1)
            {
                curNum = (curNum + k) % lst.Count;
                lst.RemoveAt(curNum);
                Console.WriteLine(string.Join(" ",lst));
            }
0
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 283
04.09.2017, 22:22  [ТС] 3
Diamante, это да,я это тоже сделал,суть в том,что я использовал словарь,чтобы не тупо число выводить,а имя и число и т.п. Поэтому и решил использовать словарь
0
20 / 20 / 13
Регистрация: 29.08.2017
Сообщений: 89
04.09.2017, 23:27 4
Наверное можно использовать не словарь а тот же список кортежей List<Tuple<int, string>>
Первый аргумент - номер, второй - имя.
0
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
05.09.2017, 01:39 5
я исходил из задания
Цитата Сообщение от Bob103 Посмотреть сообщение
Требуется определить начальный номер этого человека.
если хочеццо еще и имен, то, имхо, вариант AnotherDev будет к месту, но можно сделать класс/структуру номер/имя и их "считать"...
0
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 283
05.09.2017, 09:25  [ТС] 6
Ну и на этом спасибо)
0
93 / 77 / 31
Регистрация: 29.08.2017
Сообщений: 188
05.09.2017, 15:33 7
Вообще-то формула есть готовая, но если уж хочется имитировать этот процесс...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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());
    }
}
0
05.09.2017, 15:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2017, 15:33
Помогаю со студенческими работами здесь

Задача Иосифа Флавия
Здравствуйте. Помогите пожалуйста реализовать такую задачу через списки: По кругу становятся...

Задача Иосифа Флавия
По окружности в направлении движения часовой стрелки расположены n последовательных натуральных...

Задача Иосифа Флавия
100 человек стоят по кругу, им присвоены номера от 1 до 100. Они начинают считаться и каждый 19-й...

Задача Иосифа Флавия
Даны натуральные n, m. Предполагается, что n человек встают в круг и получают номера, считая против...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru