Следующий псевдокод, который вычисляет 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-го контрольного примера, но не для последующих.