Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

자바에서 N번째 못생긴 숫자 찾기

<시간/>

소인수가 2, 3 또는 5인 수를 추한 수라고 합니다. 보기 흉한 숫자는 1, 2, 3, 4, 5, 6, 8, 10, 12, 15 등입니다.

N이라는 숫자가 있습니다. 그리고 과제는 못생긴 숫자의 순서에서 N번째 못생긴 숫자를 찾는 것입니다.

예:

입력-1:

N = 5

출력:

5

설명:

못생긴 숫자[1, 2, 3, 4, 5, 6, 8, 10, 12, 15]의 시퀀스에서 5번째 못생긴 숫자는 5입니다.

입력-2:

N = 7

출력:

8

설명:

못생긴 숫자[1, 2, 3, 4, 5, 6, 8, 10, 12, 15]의 배열에서 7번째 못생긴 숫자는 8입니다.

이 문제를 해결하기 위한 접근 방식

이 문제를 해결하는 간단한 방법은 주어진 숫자가 2, 3 또는 5로 나누어 떨어지는지 확인하고 주어진 숫자까지 시퀀스를 추적하는 것입니다. 이제 숫자가 못생긴 숫자의 모든 조건을 만족하는지 찾은 다음 그 숫자를 출력으로 반환합니다.

  • N번째 못생긴 숫자를 찾으려면 숫자 N을 입력하세요.
  • 부울 함수 isUgly(int n)는 숫자 'n'을 입력으로 받아 추한 숫자이면 True를 반환하고 그렇지 않으면 False를 반환합니다.
  • 정수 함수 findNthUgly(int n)는 'n' 숫자를 입력으로 사용하고 n th 못생긴 숫자가 출력됩니다.

예시

public class UglyN {
   public static boolean isUglyNumber(int num) {
      boolean x = true;
      while (num != 1) {
         if (num % 5 == 0) {
            num /= 5;
         }
         else if (num % 3 == 0) {
            num /= 3;
         }
         // To check if number is divisible by 2 or not
         else if (num % 2 == 0) {
            num /= 2;
         }
         else {
            x = false;
            break;
         }
      }
      return x;
   }
   public static int nthUglyNumber(int n) {
      int i = 1;
      int count = 1;
      while (n > count) {
         i++;
         if (isUglyNumber(i)) {
            count++;
         }
      }
      return i;
   }
   public static void main(String[] args) {
      int number = 100;
      int no = nthUglyNumber(number);
      System.out.println("The Ugly no. at position " + number + " is " + no);
   }
}

출력

The Ugly no. at position 100 is 1536.