Определение, является ли число числом Фибоначчи - PullRequest
7 голосов
/ 29 июня 2010

Мне нужно написать код Java, который проверяет, входит ли введенный пользователем номер в последовательность Фибоначчи.

У меня нет проблем с записью последовательности Фибоначчи для вывода, но (вероятно, потому что поздно ночью) я изо всех сил пытаюсь подумать о последовательности "является ли" это число Фибоначчи. Я продолжаю начинать снова и снова. Это действительно делает мою голову.

В настоящее время у меня есть nth.

public static void main(String[] args)
{
    ConsoleReader console = new ConsoleReader();

    System.out.println("Enter the value for your n: ");
    int num = (console.readInt());
    System.out.println("\nThe largest nth fibonacci: "+fib(num));
    System.out.println();
}

static int fib(int n){
    int f = 0;
    int g = 1;
    int largeNum = -1;
    for(int i = 0; i < n; i++)
    {
      if(i == (n-1))
          largeNum = f;
      System.out.print(f + " ");
      f = f + g;
      g = f - g;
    }
    return largeNum;
}

Ответы [ 14 ]

0 голосов
/ 29 июля 2016

Определение числа Фибоначчи на основе формулы:

public static boolean isNumberFromFibonacciSequence(int num){

    if (num == 0 || num == 1){
        return true;
    }

    else {
        //5n^2 - 4 OR 5n^2 + 4 should be perfect squares
        return isPerfectSquare( 5*num*num - 4) || isPerfectSquare(5*num*num - 4);
    }
}

private static boolean isPerfectSquare(int num){
        double sqrt = Math.sqrt(num);
        return sqrt * sqrt == num;
}
0 голосов
/ 20 сентября 2013

Рассмотрим последовательность чисел Фибоначчи 1, 2, 3, 5, 8, 13, 21 и т. Д. Желательно построить 3 стека, каждый емкостью 10, содержащий числа из вышеуказанных последовательностей, следующим образом:

Стек 1: первые 10 чисел из последовательности. Стек 2: первые 10 простых чисел из последовательности. Стек 3: первые 10 не простых чисел из последовательности.

(i) Дайте алгоритм блок-схемы (ii) Напишите программу (на бейсике, C ++ или Java) для реализации этого.

Вывод: поскольку операции со стеком выполняются, вы должны отобразить в любой удобной форме 3 стека вместе со значениями, содержащимися в них.

0 голосов
/ 29 июня 2010

Вы можете сделать это двумя способами, рекурсивным и математическим.рекурсивным способом начните генерировать последовательность Фибоначчи, пока вы не наберете число или не передадите его математически, как описано здесь ... http://www.physicsforums.com/showthread.php?t=252798

удачи.

0 голосов
/ 29 июня 2010

Я не знаю, есть ли фактическая формула, которую вы можете применить к пользовательскому вводу, однако вы можете сгенерировать последовательность Фибоначчи и сравнить ее с пользовательским вводом, пока она не станет меньше, чем последнее сгенерированное число.

int userInput = n;
int a = 1, b = 1;

while (a < n) {
  if (a == n)
    return true;

  int next = a + b;
  b = a;
  a = next;
}

return false;
...