3 / 3 / 1
Регистрация: 21.03.2016
Сообщений: 97
1

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

01.11.2016, 11:51. Показов 5683. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Помогите пожалуйста с этой задачей. Никак допедрить не могу.

вот код:

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
#include<iostream> 
#include<locale.h>
using namespace std;
 
int main(void) {
    system("color 13");
    setlocale(LC_ALL, "Russian");
 
    int i, j;  
    int iosif[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
    j = 0;
    for (i = 0; i < 10; i++){
        if (iosif[i]>0)
            j++;
            if (j == 3){
                iosif[i] = 0;
                j = 0;
            }
            //if (i = 10)
                //i = 0;
    }
 
    for (i = 0; i < 10; i++)
        cout << iosif[i] << endl;
 
    system("pause"); 
    return 0;
}
1) Так как мы массивы сильно не проходили, учитель сказал объявить массив на 10 элементов и заполнить его.
2) Как понятно из кода, каждый третий элемент надо вычеркивать из массива.
3) Все отлично, он до 10и вычеркивает. Но как ему вернуться снова на первый элемент и дальше считать пропуская все нули?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2016, 11:51
Ответы с готовыми решениями:

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

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

Задача иосифа флавия
N человек играют в следующую игру: стоя в кругу они начинают считалку. Счёт идёт до числа M....

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

8
1427 / 1210 / 821
Регистрация: 29.02.2016
Сообщений: 3,618
01.11.2016, 12:41 2
вычеркнуть мне кажется не значит занулить, вычеркнуть - это скорее всего убрать элемент из массива и сделать массив на 1 элемент короче
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
01.11.2016, 13:19 3
попытался дополнить то, что ты написал - должно работать.

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
#include<iostream>
using namespace std;
 
int main(void) {
    const int N = 10;
    int iosif[N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
    for (int i = 0, j = 0, alive = N; alive > 2; i++, i %= N) {
        if (iosif[i] > 0) {
            j++;
        }
 
        if (j == 3) {
            iosif[i] = 0;
            j = 0;
            --alive;
        }
    }
 
    for (int i = 0; i < N; i++)
        cout << iosif[i] << endl;
 
    return 0;
}
1
3 / 3 / 1
Регистрация: 21.03.2016
Сообщений: 97
01.11.2016, 15:04  [ТС] 4
Будет работать, но мне нужно таким методом как я начал. Преподаватель не поверит что это я написал так как мы многое не проходили(
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
01.11.2016, 15:25 5
Цитата Сообщение от Рома Эдуардович Посмотреть сообщение
мы многое не проходили
Так там единственный элемент, который добавляется - comma operator в циклах.
Ну перенесите объявление перед циклом, а одно из событий после итерации цикла вынесите в тело цикла и всё.
Это не какие-то там новые и сложные элементы.
1
3 / 3 / 1
Регистрация: 21.03.2016
Сообщений: 97
02.11.2016, 03:34  [ТС] 6
Цитата Сообщение от MrGluck Посмотреть сообщение
Так там единственный элемент, который добавляется - comma operator в циклах.
Вот я про него вообще не знаю что это за шайтан))
0
11 / 11 / 11
Регистрация: 16.07.2014
Сообщений: 55
02.11.2016, 07:57 7
Рома Эдуардович,
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
#include<iostream> 
#include<locale.h>
using namespace std;
 
int main(void) {
  system("color 13");
  setlocale(LC_ALL, "Russian");
 
  int i, j, kill=0;
  int iosif[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
  j = 0;
  for (i = 0; i < 10; i++){
    if (iosif[i]>0)
      j++;
    if (j == 3){
      iosif[i] = 0;
      j = 0;
      kill++; //сколько убили
    }
    if (kill == 8) // если убили 8 то
      break; //выход из цикла
    if (i == 9) // тут исправил твою идею не =(присвоить) а ==(сравнение) и не 10 а 9, так как начинаем i= 0 до 9
        i = -1; // -1 потому что слдеующий шаг цикла сделает i++ и получится i ранвно 0
  }
 
  for (i = 0; i < 10; i++)
    cout << iosif[i] << endl;
 
  system("pause");
  return 0;
}
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
02.11.2016, 09:01 8
Igor_s, может хоть условие в голову цикла можно поставить, чтобы от break избавиться?

Не по теме:

или это тоже слишком сложно



C++
1
2
3
4
5
6
7
8
9
10
11
12
  j = 0;
  for (i = 0; kill != 8; i++){
    if (iosif[i]>0)
      j++;
    if (j == 3){
      iosif[i] = 0;
      j = 0;
      kill++; //сколько убили
    }
    if (i == 9) // тут исправил твою идею не =(присвоить) а ==(сравнение) и не 10 а 9, так как начинаем i= 0 до 9
        i = -1; // -1 потому что слдеующий шаг цикла сделает i++ и получится i ранвно 0
  }
1
11 / 11 / 11
Регистрация: 16.07.2014
Сообщений: 55
02.11.2016, 09:57 9
Babysitter,
Да так лучше, спасибо за совет.
Насчет сложности пусть решает автор темы.
0
02.11.2016, 09:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2016, 09:57
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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