Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2013, 19:42   #1
GGLeq
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 14
По умолчанию Рекурсия

Пусть n человек встали в круг и получили номера от 1 до n по часовой стрелке. Затем, начиная с первого, по часовой стрелке отсчитывается m человек. Этот m–й человек выходит из круга, после чего, начиная со следующего, снова отсчитывается m–й человек. Так продолжается до тех пор, пока не останется один человек. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека.

Пожалуйста, решите рекурсивно.
GGLeq вне форума Ответить с цитированием
Старый 10.06.2013, 20:11   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Самостоятельно что-нибудь получилось сделать?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 10.06.2013, 21:43   #3
GGLeq
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 14
По умолчанию

Код:
#include <iostream>
int Function(int*,int,int,int);
int main()

{
using namespace std;
int kolvo_ludei,s_kakogo_nachati,a=0;
cout«"vvedite kol-vo";
cin»kolvo_ludei;
cout«"S kakogo nachati?";
cin»s_kakogo_nachati;
int *Mas=new int [kolvo_ludei]; 
for(int i=0; i<kolvo_ludei; i++)
{ Mas[i]=i+1; }
// a=Function(Mas,0,kolvo_ludei,s_kakogo_nachati);
cout«Function(Mas,0,kolvo_ludei,s_kakogo_nachati);;
cin.get(); 
cin.get();
return 0;
}
int Function(int *Mas ,int polozh, int length,int hag)
{ 
if (length==1)
{return Mas[0];}
else
{
int count=0,i; 
for(i=0;i<length;i++)
{
if((((i+polozh)%hag)==0)&&(i!=0) && (Mas[i]!=0))
count++;
Mas[i-count]=Mas[i];
}
Function(Mas ,((i+polozh)%hag), length-count,hag);
} 
}

Последний раз редактировалось Serge_Bliznykov; 10.06.2013 в 21:50.
GGLeq вне форума Ответить с цитированием
Старый 12.06.2013, 14:11   #4
GGLeq
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 14
По умолчанию

Вопрос еще актуальный. Прогонял отладчиком почему-то не выкидывает из рекурсии(поподает в первый if возвращает нулевой элемент, а далее не выбрасывает из функции ,а остается в ней, как итог выводит то ли 6, то ли 7 значное число) и алгоритм не работает если шаг становится больше длины массива

Последний раз редактировалось GGLeq; 12.06.2013 в 14:14.
GGLeq вне форума Ответить с цитированием
Старый 12.06.2013, 14:40   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Вроде работает:
Код:
#include <iostream>

using namespace std;

int
srch(int a[], int n, int m, int p)
{
    if (n == 1)
        return a[0];
    p = (p + m - 1) % n;
    for (int i = p; i < n - 1; ++i)
        a[i] = a[i + 1];
    return srch(a, n - 1, m, p);
}

int
main()
{
    int n, m;
    cout << "Input N, M: ";
    cin >> n >> m;
    int a[n];
    for (int i = 0; i < n; ++i)
        a[i] = i + 1;
    cout << "Last: " << srch(a, n, m, 0);
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.06.2013, 14:52   #6
GGLeq
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 14
По умолчанию

Большое спасибо!
GGLeq вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия. Leshii Помощь студентам 3 10.08.2012 21:25
Рекурсия MaSS93 Паскаль, Turbo Pascal, PascalABC.NET 0 24.05.2012 18:52
Рекурсия iSkulll Помощь студентам 3 28.04.2011 22:30
рекурсия misha25525 Помощь студентам 4 25.03.2010 18:57