C ++ Continuar (3n + 1) conjetura

1005 Continuar (3n + 1) conjetura (25 puntos)
 

La conjetura de Callatz ha sido descrita en 1001. En este tema, la situación es un poco más complicada.

Cuando verificamos la conjetura de Karaz, para evitar cálculos repetidos, podemos registrar cada número encontrado en el proceso de recursión.

Por ejemplo  , cuando verificamos n = 3, necesitamos calcular 3, 5, 8, 4, 2, 1, luego cuando  verificamos n = 5, 8, 4, 2, podemos determinar directamente la conjetura de Karaz No es necesario repetir el cálculo, ya que estos 4 números ya se han encontrado al verificar 3. Llamamos a 5, 8, 4, 2 para que estén "cubiertos" por 3. Llamamos a cierto número n en una secuencia  como "número clave", si  n no puede ser cubierto por otros números en la secuencia.

Ahora, dada una serie de números para verificar, solo necesitamos verificar algunos de los números clave, y no tenemos que verificar los números restantes nuevamente. Su tarea es encontrar estas cifras clave y generarlas en orden de mayor a menor.

Formato de entrada:

Cada entrada de prueba contiene 1 caso de prueba, la primera línea da un número entero positivo  K ( <), la segunda línea da  K números enteros positivos diferentes n ( 1) para verificar  , con espacios entre los números Por separado.

Formato de salida:

La salida de cada caso de prueba ocupa una línea, y los números clave se emiten en orden de mayor a menor. Los números están separados por un espacio, pero no hay espacio después del último número en una fila.

Entrada de muestra:

                                                                         6
                                                                         3 5 6 7 8 11
 

Salida de muestra:

                                                                          7 6

 

 

 

 

1 #include <iostream>
 2  
3 #include <algoritmo>
 4 #include <vector>
 5 #include < string >
 6  
7  
8  
9  usando el  espacio de nombres std;
10  
11  bool is_contain_this_num (vector < int > nums, int a)
 12  {
 13      for ( int i = 0 ; i <nums.size (); ++ i)
 14      {
 15          if (a == nums [i])
 16          {
 17              regreso verdadera ;
18          }
 19      }
 20      devuelve  falso ;
21  }
 22  
23  
24  bool cmp ( int s1, int s2)
 25  {
 26      return s1> s2;
27  }
 28  
29  int main ()
 30  {
 31      int numcount;
32      cin >> numcount;
33      vectores < int > nums;
34      para ( inti = 0 ; i <numcount; ++ i)
 35      {
 36          int num;
37          cin >> num;
38          nums.push_back (num);
39      }
 40      
41      // 存放 经过 检验 的 数
42      vector < int > check_vec;
43      para ( int i = 0 ; i <nums.size (); ++ i)
 44      {
 45          int n = nums [i];
46          if (! Is_contain_this_num (check_vec, n))
 47          {
48              while (n! = 1 ) {
 49                  if (n% 2 == 0 )
 50                  {
 51                      n / = 2 ;
52                  } más 
53                  {
 54                      n = ( 3 * n + 1 ) / 2 ;
55                  }
 56                  if (! Is_contain_this_num (check_vec, n))
 57                  {
 58                      check_vec.push_back (n);
59                 }
 60              }
 61          }
 62      }
 63  
64      vector < int > resultado;
65      para ( int i = 0 ; i <nums.size (); ++ i)
 66      {
 67          bool flag = false ;
68          para ( int j = 0 ; j <check_vec.size (); ++ j)
 69          {
 70              if (nums [i] == check_vec [j])
 71              {
 72                 bandera = verdadero ;
73              }
 74          }
 75          if (! Flag)
 76          {
 77              result.push_back (nums [i]);
78          }
 79      }
 80      sort (result.begin (), result.end (), cmp);
81  
82      for (vector < int > :: iterator it = result.begin (); it! = Result.end (); it ++ )
 83      {
 84          cout << * it;
85          if (it! = Result.end () - 1 )
 86          {
87              cout << "  " ;
88          }
 89      }
 90      devuelve  0 ;
91 }

 

Supongo que te gusta

Origin www.cnblogs.com/apprendre-10-28/p/12728434.html
Recomendado
Clasificación