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

파이썬에서 주어진 범위의 특수 숫자의 수를 찾는 프로그램

<시간/>

정수 범위가 주어지고 범위에서 특수 숫자를 찾으라는 요청을 받았다고 가정합니다. 특수 숫자는 10진수 표현에서 1자리만 갖는 양의 정수인 숫자입니다. 10진수 표현에 1자리 이상의 숫자가 있는 숫자는 숫자가 10진수 표현의 자릿수로 나눌 수 있고 몫 값 자체가 특수 숫자인 경우에도 특수할 수 있습니다. 주어진 범위(left_limit, right_limit)에 있는 특수 숫자의 개수를 반환합니다.

따라서 입력이 left_limit =5, right_limit =30과 같으면 출력은 13이 됩니다.

이 범위의 특수 숫자는 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24, 28입니다.

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

  • right_limit <10이면
    • return right_limit - left_limit + 1
  • len_right :=(right_limit)의 문자열 표현 크기
  • 번호 목록 :=[0,1,2,3,4,5,6,7,8,9,10,12,14,16,18]
  • 범위 2에서 len_right + 1까지의 j에 대해 다음을 수행합니다.
    • number_list의 각 k에 대해 다음을 수행합니다.
      • temp1 :=k * j
      • temp1의 문자열 표현의 크기가 j와 같으면
        • number_list 끝에 temp1 삽입
      • 그렇지 않으면 len(str(temp1))> j, then
        • 루프에서 나오다
      • number_list[number_list의 크기 - 1]>=right_limit이면
        • 루프에서 나오다
  • number_list에서 중복 값 삭제 및 정렬
  • 카운트:=0
  • number_list의 각 temp2에 대해 다음을 수행합니다.
    • temp2>=left_limit 및 temp2 <=right_limit이면
      • 카운트 :=카운트 + 1
  • 반환 횟수

예시

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

def strange(left_limit, right_limit):
   if right_limit < 10:
      return right_limit - left_limit + 1
len_right = len(str(right_limit))
number_list = [0,1,2,3,4,5,6,7,8,9,10,12,14,16,18]
for j in range(2, len_right + 1):
for k in number_list:
temp1 = k*j
if len(str(temp1)) == j:
number_list.append(temp1)
elif len(str(temp1)) > j:
break
if number_list[len(number_list)-1] >= right_limit:
break
number_list = list(set(number_list))
count = 0
for temp2 in number_list:
if temp2 >= left_limit and temp2 <= right_limit:
count = count + 1
return count
print(strange(5, 30))

입력

5, 30

출력

13