Не знаю, где я ошибаюсь в задаче

#arrays #string #recursion

#массивы #строка #рекурсия

Вопрос:

Для некоторого n мы должны определить количество разных строк, состоящих только из ‘0’ и ‘1’, в которых нет двух смежных ‘1’. (Размер строки равен n) Извините за мой плохой английский. Это моя попытка:

 long Num(int n){
    if(n==0)
        return 0;
    else if(n==1)
        return 2;
    else if(n==2)
        return 3;
    else if(n==3)
        return 5;
    else
        return 2*Num(n-2)   Num(n-3);
};
  

Комментарии:

1. Вы могли бы опубликовать какой-нибудь пример ввода, ожидаемого вывода и фактического вывода.

2. вы должны быть конкретны в своих вопросах …. вы упустили много деталей.

Ответ №1:

Проблема :

Чтобы узнать количество возможных двоичных строк длиной n, не имеющих последовательных единиц.

Ввод / вывод :

Ввод: N = 2 Вывод: 3 // 3 строки — 00, 01, 10

Ввод: N = 3 Вывод: 5 // 5 строк — 000, 001, 010, 100, 101

Подход :

Пусть a[i] — количество двоичных строк длины i, которые не содержат никаких двух последовательных единиц и которые заканчиваются на 0. Аналогично, пусть b [i] — количество таких строк, которые заканчиваются на 1. Мы можем добавить 0 или 1 к строке, оканчивающейся на 0, но мы можем добавить 0 только к строке, оканчивающейся на 1. Это дает рекуррентное отношение:

 a[i] = a[i - 1]   b[i - 1]
b[i] = a[i - 1] 
  

Базовыми случаями приведенного выше повторения являются a [1] = b [1] = 1. Общее количество строк длины i равно просто a[i] b[i] . При использовании массива i (длина строки) будет на 1 меньше, для нулевой позиции массива.

Решение :

 int countStrings(int n)
{
    int a[] = new int [n];
    int b[] = new int [n];
    a[0] = b[0] = 1;
    for (int i = 1; i < n; i  )
    {
        a[i] = a[i-1]   b[i-1];
        b[i] = a[i-1];
    }
    return a[n-1]   b[n-1];
}
  

Для получения более подробной информации см. http://www.geeksforgeeks.org/count-number-binary-strings-without-consecutive-1s /