Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาตัวเลขที่ใกล้ที่สุดที่ตัวเลขทุกหลักเป็นคี่ใน Python


สมมติว่าเรามีตัวเลข n เราต้องการหาค่าที่ใกล้ที่สุดซึ่งตัวเลขทุกหลักเป็นจำนวนคี่ เมื่อมีค่าสองค่าที่ห่างเท่ากัน ให้คืนค่าที่มากกว่า

เช่น ถ้าอินพุตเป็น n = 243 ผลลัพธ์จะเป็น 199

ขั้นตอนการแก้ปัญหา

  • first_even := -1
  • s := n เป็นสตริง
  • l := len(s)
  • วนลูปหาตัวเลขคู่ตัวแรกใน s
  • ถ้าไม่พบตัวเลขคู่ คืนค่า n
  • คำนวณค่า big (ค่ามากกว่า) และ small (ค่าน้อยกว่า) โดยปรับตัวเลขหลักที่เป็นคู่
  • เติม 1 ให้ big และ 9 ให้ small สำหรับหลักที่เหลือ
  • เปรียบเทียบระยะทาง และคืนค่าที่ใกล้กว่า (หรือค่ามากกว่าถ้าเท่ากัน)

ตัวอย่างโค้ด

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