Alta precisão: contando escadas

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 }

 

Acho que você gosta

Origin www.cnblogs.com/ZhengLijie/p/12719989.html
Recomendado
Clasificación