Descrição do título
Existem degraus N. Você pode subir um ou dois degraus.
Escreva um programa para calcular quantos movimentos diferentes existem.
Formato de entrada
Um número, o número de escadas.
Formato de saída
Existem várias maneiras de andar.
Entrada e saída de amostra
Digite # 1
4
Saída # 1
5
Instruções / Dicas
60% N <=
50100% N <= 5000)
Idéia: No início, escrevi 40 pontos. Não esperava que houvesse uma peça de alta precisão. Olhei para a solução e usei uma matriz bidimensional para salvá-la. Se o valor atual for maior que 10, carrego-o e o saio na ordem inversa.
1 #include <iostream> 2 #include <algorithm> 3 4 usando o espaço de nomes std; 5 6 int n, len = 1 , f [ 5003 ] [ 5003 ]; // f [k] [i] corresponde ao k-ésimo passo O número de movimentos é 7 nulo hp ( int k) 8 { 9 int i; 10 11 para (i = 1 ; i <= len; i ++ ) 12 { 13 f [k] [i] = f [k- 1 ] [ i] + f [k- 2 ] [i]; 14 } 15 16 para (i = 1 ; i <= len; i ++ ) 17 { 18 se (f [k] [i]> = 10 ) 19 { 20 f [k] [i + 1 ] + = f [k] [i] / 10 ; 21 f [k] [i] = f [k] [i]% 10 ; 22 if (f [k] [len + 1 ]) 23 { 24 len ++ ; 25 } 26 } 27 } 28 } 29 30 int main () 31 { 32 int i; 33 34 cin >> n; 35 36 f [ 1 ] [ 1 ] = 1 ; 37 f [ 2 ] [ 1 ] = 2 ; 38 para (i = 3 ; i <= n; i ++) // A partir da terceira ordem 39 { 40 hp (i); 41 } 42 para (i = len; i> = 1 ; i-- ) 43 { 44 cout << f [n] [i]; 45 } 46 retorno 0 ; 47 }