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

Python에서 모든 하위 번호에 고유한 Digit 제품이 있는지 확인

<시간/>

숫자 n이 있다고 가정하면 이 숫자의 모든 하위 숫자가 고유한 자릿수 곱을 갖는지 여부를 확인해야 합니다. 알다시피, n자리 숫자는 n*(n+1)/2개의 하위 숫자를 갖습니다. 예를 들어, 135의 하위 숫자는 1, 3, 5, 13, 35, 135입니다. 그리고 숫자의 자릿수 곱은 해당 자릿수의 곱입니다.

따라서 입력이 n =235와 같으면 하위 번호가 [2, 3, 5, 23, 35, 235]이고 숫자 곱이 [2, 3, 5, 6, 15, 30이므로 출력은 True가 됩니다. ]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

dig_prod() 함수를 정의합니다. 숫자가 필요합니다.

  • 제품:=1
  • 각 d에 대해 다음을 수행합니다.
    • 제품 :=제품 * d
  • 반품
  • 기본 방법에서 다음을 수행합니다.
  • num_str :=문자열로 된 숫자
  • 길이:=num_str의 크기
  • digits :=크기 길이 목록이며 처음에는 모든 값이 null입니다.
  • prod_set :=새로운 빈 세트
  • 0부터 길이까지의 범위에 있는 i에 대해
    • 숫자[i] :=num_str[i]를 정수로
  • 0에서 길이 - 1까지의 범위에 있는 i에 대해
    • i 범위에서 길이 - 1까지의 j에 대해
      • 항목 :=dig_prod(숫자[인덱스 i에서 j까지])
      • 항목이 prod_set에 있으면
        • 거짓을 반환
      • 그렇지 않으면
        • prod_set에 항목 삽입
  • 참 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

def dig_prod(digits):
   product = 1
   for d in digits:
      product *= d
   return product
def solve(num):
   num_str = str(num)
   length = len(num_str)
   digits = [None] * length
   prod_set = set()
   for i in range(0, length):
      digits[i] = int(num_str[i])
   for i in range(0, length):
      for j in range(i, length):
         item = dig_prod(digits[i:j+1])
         if item in prod_set:
            return False
         else:
            prod_set.add(item)
   return True
n = 235
print(solve(n))

입력

235

출력

True