Advertisement
Vengadora

2-2014-B

Nov 23rd, 2014
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.75 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class BRapido {
  4.   // un vector con números fibonacci
  5.   public static int nf, INFINITO = 10000;
  6.   public static int[] F = new int[INFINITO];
  7.  
  8.   public static void alimentarF(int numero) {
  9.     while (F[nf-1] < numero) {
  10.       F[nf] = F[nf-1] + F[nf-2];
  11.       nf++;
  12.     }
  13.   }
  14.  
  15.   /* devuelve -1 si no lo encuentra, de lo contrario, devuelve
  16.      el índice en el que se encuentra el número fibonacci */
  17.   public static int buscarF(int numero) {
  18.     /* [a,b] es el rango de índices de F dentro de los que podría
  19.        estar el número */
  20.     int a=0, b=nf, mitad=b/2;
  21.  
  22.     while (b-a > 1) {
  23.       mitad = a + (b-a)/2;
  24.       if (numero == F[mitad])
  25.     return mitad;
  26.  
  27.       if (numero < F[mitad])
  28.     b = mitad;
  29.       else
  30.     a = mitad;
  31.     }
  32.  
  33.     if (F[mitad] == numero)
  34.       return mitad;
  35.  
  36.     return -1;
  37.   }
  38.  
  39.   public static boolean esFibonacci(int numero) {
  40.     /* si el vector de fibonaccis aún no ha llegado hasta
  41.        el número, alimentar al vector de fibonaccis hasta
  42.        que llegue al número. */
  43.     alimentarF(numero);
  44.  
  45.     /*
  46.       Ahora, voy a buscar al número, mediante el método
  47.       binary search, dentro del vector F de fibonaccis.
  48.      */
  49.     int indice = buscarF(numero);
  50.  
  51.     return indice != -1;
  52.  
  53.   }
  54.  
  55.   public static void main(String[] args) {
  56.     F[0] = 0;
  57.     F[1] = 1;
  58.     nf = 2;
  59.     Scanner cin = new Scanner(System.in);
  60.     int n = cin.nextInt(); // esta variable fue declarada globalmente.
  61.  
  62.     // leyendo el vector ... (el vector fue declarado globalmente (línea 8))
  63.     for (int i=0; i<n; i++) {
  64.       int a = cin.nextInt();
  65.       System.out.print(a + " ");
  66.  
  67.       if (esFibonacci(a))
  68.     System.out.print(a + " ");
  69.     }
  70.  
  71.     System.out.println();
  72.  
  73.   }
  74.  
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement