Форум программистов, компьютерный форум CyberForum.ru

Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека - C++

Восстановить пароль Регистрация
 
GGLeq
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 9
10.06.2013, 19:44     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #1
Пусть n человек встали в круг и получили номера от 1 до n по часовой стрелке. Затем, начиная с первого, по часовой стрелке отсчитывается m человек. Этот m–й человек выходит из круга, после чего, начиная со следующего, снова
отсчитывается m–й человек. Так продолжается до тех пор, пока не останется один человек. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека.

Пожалуйста, решите рекурсивно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 19:44     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека
Посмотрите здесь:

C++ Напишите программу, которая определит, могут ли эти числа быть длинами сторон равнобедренного треугольника
C++ Рекурсия. Составьте программу, которая для заданного натурального числа n вычисляет значение выражения
C++ Составьте программу, которая для целого числа k (от 1 до 99)
C++ Составить программу для расчёта значений величин, заданных в виде сложных алгебраических формул
C++ Составьте программу на языке С++ для вычисления значения функции z=f(x,y) при заданных значениях х и у.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.06.2013, 20:14     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #2
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
#include <stdio.h>
 
#define N 10
void Sdvig(int *a, int *end)
{
   if (a + 1 < end)
   {
      *a = *(a + 1);
      Sdvig(a + 1, end);
   }
}
 
int F(int *a, int n, int m)
{
   if (n > 1)
   {
      Sdvig(a + (m - 1) % n, a + n);
      F(a, n - 1, m);
   }
   else return *a;
}
 
int main()
{
    int a[N], i, m = 3;
    for(i = 0; i < N; ++i)
       a[i] = i + 1;
    printf("%d\n", F(a, N, m));
    return 0;
}
GGLeq
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 9
12.06.2013, 14:06  [ТС]     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #3
Какие-либо значения я не ставил все ровно при компиляции выдает: 16364
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.06.2013, 14:27     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #4
Да, там ошибка закралась, вот:
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
#define N 10
void Sdvig(int *a, int *end)
{
   if (a + 1 < end)
   {
      *a = *(a + 1);
      Sdvig(a + 1, end);
   }
}
 
int F(int *a, int *b, int n, int m)
{
   if (n > 1)
   {
      b = a + (b - a + m - 1) % n;
      Sdvig(b, a + n);
      Print(a, n - 1);
      F(a, b, n - 1, m);
   }
   else return *a;
}
 
int main()
{
    int a[N], i, m = 4;
    for(i = 0; i < N; ++i)
       a[i] = i + 1;
    printf("%d\n", F(a, a, N, m));
    return 0;
}
GGLeq
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 9
12.06.2013, 14:36  [ТС]     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #5
Вы не описали функцию Print
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.06.2013, 14:38     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #6
Цитата Сообщение от GGLeq Посмотреть сообщение
Вы не описали функцию Print
это для теста. удалите эту строку.

C
1
2
3
4
5
6
7
8
9
10
int F(int *a, int *b, int n, int m)
{
   if (n > 1)
   {
      b = a + (b - a + m - 1) % n;
      Sdvig(b, a + n);
      F(a, b, n - 1, m);
   }
   else return *a;
}
GGLeq
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 9
12.06.2013, 14:44  [ТС]     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #7
Аналогичный результат: 16384.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.06.2013, 14:45     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #8
покажите программу, которую вы запускаете
GGLeq
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 9
12.06.2013, 14:46  [ТС]     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #9
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 <stdio.h>
#define N 10
void Sdvig(int *a, int *end)
{
   if (a + 1 < end)
   {
      *a = *(a + 1);
      Sdvig(a + 1, end);
   }
}
 
int F(int *a, int *b, int n, int m)
{
   if (n > 1)
   {
      b = a + (b - a + m - 1) % n;
      Sdvig(b, a + n);
     
      F(a, b, n - 1, m);
   }
   else return *a;
}
 
int main()
{
    int a[N], i, m = 4;
    for(i = 0; i < N; ++i)
       a[i] = i + 1;
    printf("%d\n", F(a, a, N, m));
    getchar();
    return 0;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.06.2013, 15:01     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #10
У вас что-то с компилятором, вот результат онлайн компилятора:
http://ideone.com/i630KA

Добавлено через 6 минут
так попробуйте:
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
#define N 10
#include<iostream>
void Sdvig(int *a, int *end)
{
   if (a + 1 < end)
   {
      *a = *(a + 1);
      Sdvig(a + 1, end);
   }
}
 
int F(int *a, int *b, int n, int m)
{
   if (n > 1)
   {
      b = a + (b - a + m - 1) % n;
      Sdvig(b, a + n);
      F(a, b, n - 1, m);
   }
   else return *a;
}
 
int main()
{
    int a[N], i, m = 4;
    for(i = 0; i < N; ++i)
       a[i] = i + 1;
    std::cout << F(a, a, N, m);
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 15:02     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека
Еще ссылки по теме:

C++ Написать программу, которая определит, сколькими способами он может попасть в магазин, пройдя ровно K шагов
C++ Составить алгоритм и программу, которая определит сколько досок надо купить, чтобы поставить сплошной забор
Составить алгоритм и программу, которая определит стоимость обоев для всей стены, если цена одного рулона X C++

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

Или воспользуйтесь поиском по форуму:
GGLeq
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 9
12.06.2013, 15:02  [ТС]     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека #11
Скорее всего да, ибо с моим кодом та же беда была, благодарю за помощь!
Yandex
Объявления
12.06.2013, 15:02     Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека
Ответ Создать тему
Опции темы

Текущее время: 12:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru