Подсчет выполнения завершающих условий в рядах Фибоначчи - PullRequest
0 голосов
/ 28 апреля 2018

Следующий псевдокод, который вычисляет n-е число Фибоначчи:

int fibonacci(int n)
{
    if (n == 0){
        print(0)
        return 0
    }
    if (n == 1)
    {
        print(1)
        return 1
    }
    return fibonacci(n - 1) + fibonacci(n - 2)
}

Если кто-то вызовет Фибоначчи (3), произойдет следующее:

  • Фибоначчи (3) вызывает Фибоначчи (2) и Фибоначчи (1) (первый вызов).
  • Фибоначчи (2) вызывает Фибоначчи (1) (второй вызов) и Фибоначчи (0).
  • Второй вызов Фибоначчи (1) печатает 1 и возвращает 1.
  • fibonacci (0) печатает 0 и возвращает 0.
  • Фибоначчи (2) получает результаты Фибоначчи (1) и Фибоначчи (0) и возвращает 1.
  • Первый вызов Фибоначчи (1) печатает 1 и возвращает 1.
  • Фибоначчи (3) получает результаты Фибоначчи (2) и Фибоначчи (1) и возвращает 2.

Всего 1 будет напечатано дважды, а 0 - один раз.

Цель состоит в том, чтобы узнать, сколько раз будет напечатано 0 и 1 для заданного целого числа N.

ВХОД Первая строка содержит целое число T, обозначающее количество тестов. Следующие T строки содержат целое число N.

ВЫХОД Для каждого теста выведите одну строку вывода, которая содержит 2 целых числа, разделенных пробелом. Первое целое число - это количество раз, когда 0 печатается. Второе целое число - это количество раз, которое печатается 1.

ТРУДНОСТИ

1 <= T <= 50
0 <= N <= 40

ОБРАЗЕЦ ВХОДА

2

0

3 

МАЛЕНЬКИЙ ВЫХОД

1 0

1 2

код

public class Fibonacci {

    /**
     * @param args
     */
static int zero =0,one = 0;
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] input = readInput();
    for(int i =0; i < input.length;++i) {
        System.out.println(getOutput(input[i]));
    }
}
public static int[] readInput() {
    BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
    String temp;
    int[] input = null;
    try {
        temp =bufferReader.readLine();  
        int counter = Integer.parseInt(temp);
        input = new int[counter];
        for(int i =0 ; i < counter ;++i)    {
            input[i] =Integer.parseInt(bufferReader.readLine());
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
    return input;
}
public static String getOutput(int number)  {
    //System.out.println(fibonacci(number));
    return zero+" "+one;
}
public static int fibonacci(int n) {
    if (n == 0) {
        //System.out.println(0);
        ++zero;
        return 0;
    }
    if (n == 1) {
        //System.out.println(1);
        ++one;
        return 1;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

Это отлично работает для 1-го контрольного примера, но не для последующих.

1 Ответ

0 голосов
/ 28 апреля 2018

Я думаю, вам нужно сбросить значения нуля и единицы перед вызовом getOutput.

    for(int i =0; i < input.length;++i) {
        zero = 0;
        one = 0;
        System.out.println(getOutput(input[i]));
    }
...