Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm số n gần nhất mà tất cả các chữ số đều lẻ trong python

Giả sử chúng ta có một số n, chúng ta phải tìm giá trị gần nhất tiếp theo mà tất cả các chữ số đều lẻ. Khi có hai giá trị được ràng buộc vì gần nhau nhất với n, hãy trả về giá trị lớn hơn.

Vì vậy, nếu đầu vào là n =243, thì đầu ra sẽ là 199.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • first_even:=-1
  • s:=n dưới dạng chuỗi
  • l:=kích thước của s
  • đối với tôi trong phạm vi từ 0 đến l, thực hiện
    • nếu s [i] chẵn thì
      • first_even:=i
      • ra khỏi vòng lặp
  • nếu first_even giống -1, thì
    • return n
  • big:=1 + giá trị số của s [từ chỉ số 0 đến i]
  • nếu s [i] giống "0" thì
    • nếu s [i - 1] giống với "1", thì
      • small:=giá trị số của s [từ chỉ số 0 đến i] - 1
    • nếu không,
      • small:=giá trị số của s [từ chỉ số 0 đến i] - 11
  • nếu không,
    • small:=giá trị số của s [từ chỉ số 0 đến i] - 1
  • đối với tôi trong phạm vi từ i + 1 đến l, thực hiện
    • big:=big concatenate "1"
    • small:=small concatenate "9"
  • big:=giá trị số của lớn, nhỏ:=giá trị số của nhỏ
  • d2:=big - n, d1:=n - small
  • nếu d1
  • trả lại nhỏ
  • ngược lại khi d1> =d2, thì
    • trở lại lớn
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    Ví dụ

    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))

    Đầu vào

    243

    Đầu ra

    199