Форум программистов, компьютерный форум, киберфорум
Наши страницы

Сколькими способами человек может попасть в магазин - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Скиньте интересные задания по ООП С++ http://www.cyberforum.ru/cpp-beginners/thread1252179.html
Добрый вечер, Начал изучать ООП - скиньте интересные задания с использованием ООП С++. Книжные задачки перерешал уже.
C++ Класс Rectangle: возвратить значения координат, длины, ширины и площади Реализовать класс Rectangle. Класс должен хранить координаты, а так же длину и ширину прямоугольника. Предусмотреть инициализацию данного класса через конструктор по умолчанию и с помощью координат... http://www.cyberforum.ru/cpp-beginners/thread1252165.html
C++ Решение нелинейных уравнений методом простой итерации
Решение нелинейных уравнений методом простой итерации. Реализовать заданный алгоритм для уравнения , решив уравнение с заданной пользователем точностью.
C++ Перегрузка оператора + в одномерном массиве
Требуется сцепить два одномерных массива в один mnog operator+(const mnog &R){ int k = size + R.size; //размер нового массива int r = 0; mnog mnogestvo3(k);//создание объекта (новый...
C++ Удаление переменной структуры http://www.cyberforum.ru/cpp-beginners/thread1252143.html
Здравствуйте! Можете пожалуйста объяснить как удалить переменную структуры study1? Смотрел похожие темы и по существу ничего не нашел. struct study { char namef; char sname; int rate;...
C++ Флаги форматирования в cout, выравнивание справа Вот код. Я установил флаг форматирования райт. Поток перегружен и на консоль выводится площадь и периметр, вот только они нисколько не справа. Почему не работает? Rectangle... подробнее

Показать сообщение отдельно
CrazzyBeer
3 / 3 / 2
Регистрация: 24.03.2014
Сообщений: 65

Сколькими способами человек может попасть в магазин - C++

07.09.2014, 00:35. Просмотров 910. Ответов 13
Метки (Все метки)

МАГАЗИН

На расстоянии N шагов от магазина стоит человек. Каждую минуту он выбирает, куда сделать шаг: к магазину или в противоположном направлении.

Требуется написать программу, которая определит, сколькими способами он может попасть в магазин, пройдя ровно K шагов и оказавшись в магазине только после выполнения последнего шага.

Входные данные

Входной файл INPUT.TXT содержит 2 числа n и k, записанные через пробел. Известно, что 1 <= N <= K <= 37.

Выходные данные

Выходной файл OUTPUT.TXT должен содержать одно число – количество способов попадания в магазин.

Примеры
INPUT.TXT OUTPUT.TXT
2 4 ________________ 2
5 5 ________________ 1

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Привет, ребята.
У меня вот такой вопрос.
Есть у меня такая функция.
Нужно, чтобы f увеличивалась при попадании в максимальный уровень рекурсии (когда i=0)
Пробовал и глобально и через указатели - ничего.
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
void recur(int i,int t,int a[37][50]) {
    int p=f;
    if (i==0) {
        if (t==k) {
            f+=1;
            exit;
        }
    }
    if (t+i<=k) {
        if (a[i-1][t+1]==0) {
        recur(i-1,t+1,a);
        }
    }
        else if (a[i-1][t+1]>0) {
            f+=a[i-1][t+1];
        }
     if (t+i<=k) {
       if (a[i+1][t+1]==0) {
        recur(i+1,t+1,a);
       }
     }
       else if (a[i+1][t+1]>0) {
           f+=a[i+1][t+1];
       }
       if (p!=f) {
           a[i][t]=f-p;
       }
       else {
           a[i][t]=-1;
       }
     }
Как бы я не делал, что бы я не объявлял - переменная f все равно не увеличивается. Либо увеличивается, но только на один. (Пробовал писать и f++ и f+=1)
Вот полный код
Кликните здесь для просмотра всего текста

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
#include <stdio.h>
#include <iostream>
using namespace std;
int n,k;
int f=0;
void recur(int i,int t,int a[37][50]) {
    int p=f;
    if (i==0) {
        if (t==k) {
            f+=1;
            exit;
        }
    }
    if (t+i<=k) {
        if (a[i-1][t+1]==0) {
        recur(i-1,t+1,a);
        }
    }
        else if (a[i-1][t+1]>0) {
            f+=a[i-1][t+1];
        }
     if (t+i<=k) {
       if (a[i+1][t+1]==0) {
        recur(i+1,t+1,a);
       }
     }
       else if (a[i+1][t+1]>0) {
           f+=a[i+1][t+1];
       }
       if (p!=f) {
           a[i][t]=f-p;
       }
       else {
           a[i][t]=-1;
       }
     }
 
int main() {
 int a[37][50]={0};
 cin >> n >> k;
 recur(n,0,a); 
 cout << f;
 return 0;
}


Добавлено через 1 минуту
Пробовал тестить так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
void f(int i,int *ptr) {
    if (i==0) return;
    else {
        cout << "Работает" << endl;
        cout << *ptr << endl;
        f(i-1,ptr);
    }
}
int main() {
 
int *ptr = new int;
*ptr = 3;
f(6,ptr);
cout << *ptr;
delete(ptr);
}
Получается, а когда делал с указателями в той программе - больше 1 не повышалось, хотя последние уровни рекурсии достигались (проверял с помощью cout).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru