0 / 0 / 0
Регистрация: 18.09.2018
Сообщений: 2
1

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

28.05.2019, 01:42. Показов 6188. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
N человек играют в следующую игру: стоя в кругу они начинают считалку. Счёт идёт до числа M. Игрок, на которого падает счёт M, выбывает, а считалка начинается сначала со следующего по кругу игрока. Выигрывает тот, кто остался последним в кругу. Считалка начинается с игрока T, составить алгоритм для определения выигравшего игрока и первой пятёрки выбывших игроков.
Задачу хочу решить через массив, набросал код но не работает.
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
#include <iostream>
# include <math.h> 
using namespace std;
 
int main()
{ int m,n,t;
    cin>>n>>m>>t;
    int f=t;int g=0;
int x[n];int s[5];int q=0;
for ( int i=1;i<n;i++)
{x[i]=1;}
x[0]=0;
 
for ( int k=0;k<n;k++)
{ q=0;
for (;q<m&&x[f]!=1;  )
    {
        if (f>n)
    {f=1;}
        if (x[f]==1)
    {q++;f++;}
    if (x[f]==0)
    {f++;
    }}
 
    x[f]=0;
    if (g<6)
 {s[g]=f;g++;} 
 f++;
 if (x[f]==0)
 {for (;x[f]!=1;   )
    {if (f>n)
    {f=1;}
        f++;}}
    
 
}
 
for (int o=0;o<5;o++)
{cout<<s[o]<<endl;}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2019, 01:42
Ответы с готовыми решениями:

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

Задача Иосифа Флавия
Здравствуйте! Пытаясь ответить на вопрос одного из пользователей данного форума, решил в лоб...

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

Задача Иосифа Флавия, решение циклическим списком
http://andrei-sapeshko.blogspot.ru/2013/04/blog-post.html тут есть пример, но он немного...

1
Just Do It!
3976 / 2321 / 636
Регистрация: 23.09.2014
Сообщений: 7,219
Записей в блоге: 2
28.05.2019, 13:52 2
Лучший ответ Сообщение было отмечено kol4serko как решение

Решение

Цитата Сообщение от kol4serko Посмотреть сообщение
Задача иосифа флавия
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <conio.h>
 
struct sLogo
{   sLogo()
    {   std::cout << "\nTask of Josephus Flavius----------------------start:\n";
    }
};
 
///----------------------------------------------------------------------------|
/// Описание понятия "Круг из skrug::n людей".
///----------------------------------------------------------------------------:
struct skrug
{   int* x;
    int  amount;
    int  n;
 
    skrug()
    {   while(true)
        {   
            std::cout << "Amount people:\n";
            std::cin  >> n;
            
            if(n < 6) std::cout << "Error: (n < 6)\n\n";
            else break;
        }
        
        x = new int[n];   
        amount = n;
        
        for(int i = 0; i < n; ++i)
        {   x[i] = i;
        }
    }
   ~skrug()
    {   delete[] x;
    }
    
    void del(int _i)
    {   for(int i = _i; i < amount-1; ++i)
        {   x[i] = x[i+1];
        }
        amount--;
    }
};
 
///----------------------------------------------------------------------------|
/// Считалка на убывание.
///----------------------------------------------------------------------------:
struct s_Josephus_Flavius
{   s_Josephus_Flavius()
    {   std::cout << "Number Flavius: ";
        std::cin  >> m;
        
        std::cout << "T: ";
        std::cin  >> t;
        
        for(int i = 0; i < 5; ++i)
        {   t = count_man(m);
            s[i] = krug.x[t];
            krug.del(t);
            
            //std::cout << "Out t    = " << t    << "\n";
            //std::cout << "Out s[i] = " << s[i] << "\n";
            //_getch();
        }
    
        while(!check_win())
        {   t = count_man(m);
            krug.del(t);
        }
    
        show_result();
    }
    
    ///---------------------------------|
    /// Создаем круг из skrug::n людей. |
    ///---------------------------------:
    sLogo Logo;
    skrug krug;
    
    int m, t;
    int s[5];
    
    int count_man(int _m)
    {   return (_m + t) % krug.amount;
    }
    
    bool check_win()
    {   if(krug.amount == 1) return true;
        return false;
    }
    
    void show_result()
    {   std::cout << "\nLosing first 5 people:\n";
        for(int i = 0; i < 5; ++i)
        {   std::cout << s[i] << "\n";
        }
    
        std::cout << "\nThe winning person:\n" << krug.x[0] << "\n\n";
    }
};
 
///----------------------------------------------------------------------------|
/// Start.
///----------------------------------------------------------------------------:
int main()
{   
    while(true)
        s_Josephus_Flavius task;
 
    return 0;
}
осталось протестить ...
1
28.05.2019, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2019, 13:52
Помогаю со студенческими работами здесь

Алгоритм нахождения главного элемента из списка (задача Иосифа Флавия)
Выписал алгоритм,называется ф-ция Иосифа. Смысл такой,что N=9 M=5 . Допустим есть 9 человек в...

Задача Иосифа Флавия. Удалить каждый второй элемент из списка и в конце вывести на экран последний оставшийся элемент
Создать циклический список, в котором находятся элементы от 1 до N. Нужно написать программу,...

Написать алгоритм Иосифа Флавия, используя очередь
Сущ-т легенда что Иосиф Флавий выжил и стал известным благодоря математической одаренности. В ходе...

Задача Иосифа
Что-то жесткая задача... По кругу располагаются n=20 человек. Ведущий считает по кругу, начиная с...

Задача Флавия
Задача Иосифа-Флавия.По кругу располагается n человек.Ведущий считает по кругу,начиная с первого,и...

Задача Йосифа флавия
Кто может помочь не могу дойти до этого сам , надо зделать поэтапный вывод каждого удаленного...


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

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

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