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

파이썬에서 모든 자릿수가 홀수인 n의 가장 가까운 수를 찾는 프로그램

<시간/>

숫자 n이 있다고 가정하고 모든 숫자가 홀수인 다음으로 가장 가까운 값을 찾아야 합니다. n에 가장 가까운 값으로 묶인 값이 두 개 있는 경우 더 큰 값을 반환합니다.

따라서 입력이 n =243과 같으면 출력은 199가 됩니다.

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

  • first_even :=-1
  • s :=n을 문자열로
  • l :=s의 크기
  • 0~l 범위의 i에 대해
    • s[i]가 짝수이면
      • first_even :=나
      • 루프에서 나오다
  • first_even이 -1과 같으면
    • 반환 n
  • big :=1 + s의 숫자 값[인덱스 0에서 i까지]
  • s[i]가 "0"과 같으면
    • s[i - 1]이 "1"과 같으면
      • 작은 :=s[인덱스 0에서 i까지]의 숫자 값 - 1
    • 그렇지 않으면
      • 작은 :=s[인덱스 0에서 i까지]의 숫자 값 - 11
  • 그렇지 않으면
    • 작은 :=s[인덱스 0에서 i까지]의 숫자 값 - 1
  • i + 1에서 l 사이의 i에 대해 다음을 수행합니다.
    • big :=큰 연결 "1"
    • 작은 :=작은 "9" 연결
  • 큰 :=큰 숫자 값, 작은 숫자 :=작은 숫자 값
  • d2 :=큰 - n, d1 :=n - 작은
  • d1
  • 작은 반환
  • 그렇지 않으면 d1>=d2일 때
    • 큰 수익
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    예시

    class Solution:
       def solve(self, n):
          first_even = -1
          s = str(n)
          l = len(s)
          for i in range(l):
             if int(s[i]) % 2 == 0:
                first_even = i
                break
          if first_even == -1:
             return n
          big = str(int(s[: i + 1]) + 1)
          if s[i] == "0":
             if s[i - 1] == "1":
                small = str(int(s[: i + 1]) - 1)
             else:
                small = str(int(s[i : i + 1]) - 11)
          else:
             small = str(int(s[: i + 1]) - 1)
    
          for i in range(i + 1, l):
             big += "1"
             small += "9"
    
          big, small = int(big), int(small)
          d2 = big - n
          d1 = n - small
          if d1 < d2:
             return small
          elif d1 >= d2:
             return big
         
    ob = Solution()
    n = 243
    print(ob.solve(n))

    입력

    243

    출력

    199