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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
gigas
7 / 1 / 1
Регистрация: 30.11.2012
Сообщений: 91
#1

задача на рекурсию в си++ - C++

30.11.2012, 01:22. Просмотров 1204. Ответов 10
Метки нет (Все метки)

Даны числа a и b. Определите, сколько существует последовательностей из
a нулей и b единиц, в которых никакие два нуля не стоят рядом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2012, 01:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос задача на рекурсию в си++ (C++):

Задача на рекурсию - C++
Помогите решить след. задачу: Вот мой вариант, но здесь не сохраняется порядок: void Func() { int x; cin>>x; if(0==x) ...

Задача на рекурсию - C++
Вот код проги которую я написал: #include <iostream> using namespace std; int factr(double i){ int answer; if(i==1) ...

Задача на рекурсию - C++
Дано натуральное число n. Выяснить, имеется ли среди чисел n, n+1, ..., 2n близнецы, т.е. простые числа, разность между которыми равна...

Задача на рекурсию - C++
С помощью рекурсии вычислить произведение ненулевых элементов динамического массива. Кто-то знает? Вот такой вот фрагмент есть, но он...

Задача на рекурсию - C++
Дано число. Вывести все цифры этого числа, не используя дополнительных библиотек, массивов, списков и т.д. Использовать только...

Задача на рекурсию - C++
Всем доброго времени суток. Прошу подсказать мне условие задачи на рекурсию(нам дали задание самим придумать себе задание и выполнить...

10
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
30.11.2012, 01:28 #2
ну по крайней мере сразу с уверенностью можно сказать, что если b - a > 1, то ни одной.
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.11.2012, 06:35 #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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
using namespace std;
#define N 51 
int t[N];
int rec(int a, int b, int l, int n)
{
    if(l>n)
        return 1;
    if(t[l-1]==0)
    {
        if(b==0)
            return 0;
        t[l]=1;
        return rec(a, b-1, l+1, n);
    }
    else
    {
        int tmp=0;
        if(a>0)
        {
            t[l]=0;
            tmp+=rec(a-1, b, l+1, n);
        }
        if(b>0)
        {
            t[l]=1;
            tmp+=rec(a, b-1, l+1, n);
        }
        return tmp;     
    }
}
int main(){
    int a, b;
    cin>>a>>b;
    t[0]=1;
    cout<<rec(a,b,1,a+b)<<endl;
    return 0;
 }
работает при a+b<=50
1
gigas
7 / 1 / 1
Регистрация: 30.11.2012
Сообщений: 91
30.11.2012, 19:04  [ТС] #4
Спасибо большое, но есть одно не понятное, почему когда программа компилируется, и пытаешься ввести значения, то программа прекращается и выкидывает из неё?
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
01.12.2012, 00:03 #5
Цитата Сообщение от gigas Посмотреть сообщение
Спасибо большое, но есть одно не понятное, почему когда программа компилируется, и пытаешься ввести значения, то программа прекращается и выкидывает из неё?
Тогда у меня вопросы:
Программа компилируется?
Какие значения вводите, когда программа прекращается и выкидывает из неё?
1
dikanev
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
01.12.2012, 01:15 #6
Чтобы нули не стояли рядом, нужно между ними расставить по единице. Если b < a-1, то единиц не хватит и сразу выводим 0. Иначе, остается b - a + 1 единица, которые мы можем произвольно раскидать по а+1 позициям. Пусть p[1], ..., p[a+1] - количество единиц в каждой позиции. Нас интересует число решений уравнения

p[1]+...+p[a+1] = b-a+1

где p целые неотрицательные числа. Такие решения называются композициями целого числа n = b-a+1 длиной k = a+1. Из комбинаторики известно, что число таких композиций равно числу сочетаний из n+k-1 = b+1 по k-1 = a и составляет, таким образом,

N = (b+1)!/(a!*(b-a+1)!)

А рекурсию используй для вычисления факториала
1
gigas
7 / 1 / 1
Регистрация: 30.11.2012
Сообщений: 91
01.12.2012, 13:25  [ТС] #7
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Тогда у меня вопросы:
Программа компилируется?
Какие значения вводите, когда программа прекращается и выкидывает из неё?
она компилируется! запускаешь программу и пытаясь хоть что то ввести она прекращается
0
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
01.12.2012, 13:29 #8
Цитата Сообщение от gigas Посмотреть сообщение
она компилируется! запускаешь программу и пытаясь хоть что то ввести она прекращается
пропишите в конце System("Pause");
0
gigas
7 / 1 / 1
Регистрация: 30.11.2012
Сообщений: 91
01.12.2012, 14:57  [ТС] #9
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Тогда у меня вопросы:
Программа компилируется?
Какие значения вводите, когда программа прекращается и выкидывает из неё?
значения вводишь первое либо 1 либо 0, а второе значение больше 99 уже прерывается

Добавлено через 16 минут
Цитата Сообщение от dikanev Посмотреть сообщение
Чтобы нули не стояли рядом, нужно между ними расставить по единице. Если b < a-1, то единиц не хватит и сразу выводим 0. Иначе, остается b - a + 1 единица, которые мы можем произвольно раскидать по а+1 позициям. Пусть p[1], ..., p[a+1] - количество единиц в каждой позиции. Нас интересует число решений уравнения

p[1]+...+p[a+1] = b-a+1

где p целые неотрицательные числа. Такие решения называются композициями целого числа n = b-a+1 длиной k = a+1. Из комбинаторики известно, что число таких композиций равно числу сочетаний из n+k-1 = b+1 по k-1 = a и составляет, таким образом,

N = (b+1)!/(a!*(b-a+1)!)

А рекурсию используй для вычисления факториала
я в си++ новичок , поэтому изъясните пожалуйста попонятней!

Добавлено через 15 минут
Цитата Сообщение от valeriikozlov Посмотреть сообщение
C++
1
2
3
4
5
#include <iostream>
using namespace std;
#define N 51 
....
 }
работает при a+b<=50
а можно понять смысл работы программы?
0
BumerangSP
01.12.2012, 15:04
  #10
 Комментарий модератора 
gigas, не нужно дублировать тему для того, чтобы уточнить, что Вам нужно " с компилятором dev-c++"
1
gigas
7 / 1 / 1
Регистрация: 30.11.2012
Сообщений: 91
01.12.2012, 15:21  [ТС] #11
Ребят спасибо всем большое, я разобрался)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 15:21
Привет! Вот еще темы с ответами:

Задача на рекурсию - C++
Задание: написать функцию умножения двух чисел, используя только операции сложения и рекурсии. Не понимаю как это сделать( Прошу...

Задача на рекурсию - C++
Нашел одну задачу, она по моему на рекурсию, но не могу реализовать это. Сколько существует чисел от 1 до n, таких, что цифры числа...

Задача на рекурсию - C++
помогите написать пожалуйста программу на с++ по теме рекурсия. Задано действительное A, найти среди чисел 1; 1+1/2; 1+1/2+1/3;.... ...

Задача на рекурсию - C++
Задание : Напишите функцию возведения в степень, которая работала бы как для положительных, так и для отрицательных значений n:...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
01.12.2012, 15:21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru