2017-12-31 37 views
0

예 : n1 = 100, n2 = 250, out = 233.주어진 값 범위에서 가장 큰 홀수 피보나치 수 찾기

여기 주어진 세트 범위에서 가장 큰 홀수 피보나치 수를 찾아야합니다. 이상한 피보나치 수가 존재하지 않으면 0을 반환해야합니다. 나는 50 번 0 번과 10 번 233 번 출력을 얻고 있습니다. 실수는 어디에서 발생하며 어떻게 원하는 출력을 얻을 수 있습니까?

public class Fibo { 
    public static void main(String[] args) { 
     try { 
      int n1 = 100; 
      int n2 = 250; 
      int res = 0; 

      if (n1 % 2 == 0) { 
       n1 += 1; 

       for (int i = n1; i < n2; i += 2) { 
        if (isPerfectSquare(5 * i * i + 4) || isPerfectSquare(5 * i * i - 4)) 
         res = i; 
        System.out.println(res); 
       } 
      } 
     } catch(Exception ignored) { 
      System.out.println("0"); 
     } 
    } 

    public static boolean isPerfectSquare(int num) { 
     double sqrt = Math.sqrt(num); 
     int x = (int)sqrt; 
     return Math.pow(sqrt, 2) == Math.pow(x, 2); 
    } 
} 
+0

코드를 포맷하십시오! IDE는 모든 것을 들여 쓰고 포맷해야합니다. – bcsb1001

+2

* 나를 편집하십시오 * 죄송합니다. 내 컴퓨터에 * Akshay *가 설치된 편집기가 없으며 Google에서도 찾을 수 없습니다. 의사와상의해야할까요? –

+0

[작은 프로그램을 디버깅하는 방법] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)에서 조언을 따를 경우 문제가 발생합니다. 당신은 정말로 이것을 스스로하는 법을 배워야하고, 지금은 배울 좋은 시간입니다. 오리는 알고 있습니다 ... –

답변

-1
public static int getLargestOddFibonacciBetween(int lo, int hi) { 
    assert lo <= hi; 

    int f0 = 0; 
    int f1 = 1; 
    int res = -1; 

    while (f1 <= hi) { 
     int val = f0 + f1; 
     f0 = f1; 
     f1 = val; 

     if (val >= lo && val <= hi && isOdd(val)) 
      res = val; 
    } 

    return res; 
} 

private static boolean isOdd(int val) { 
    return (val & 1) == 1; 
} 
+0

답변에는 간단한 설명이 포함되어 있어야합니다 (예 : OP가 잘못 되었습니까?). OP의 질문 : "내 실수는 어디에서 어떻게되고 원하는 출력을 얻을 수 있습니까?"를 참조하십시오. – MyStackRunnethOver