การหาเลขสูงสุดจากการแทรกหลัก 5
กำหนดจำนวนเต็ม n หาเลขสูงสุดที่ได้จากการแทรกหลัก 5 เข้าไปที่ตำแหน่งใดก็ได้หนึ่งตำแหน่ง
อัลกอริทึม
- ถ้า n > 0 (บวก): แปลงเป็นสตริง วนซ้ายไปขวา หาตำแหน่งแรกที่หลัก < 5 แทรก 5 ก่อนหน้านั้น
- ถ้า n < 0 (ลบ): ใช้ค่าสัมบูรณ์ วนซ้ายไปขวา หาตำแหน่งแรกที่หลัก > 5 แทรก 5 ก่อนหน้านั้น (ทำให้ค่าสัมบูรณ์น้อยลง → ค่าลบมากขึ้น)
- ถ้าไม่เจอตำแหน่ง ให้ต่อท้าย 5
ตัวอย่างโค้ด
def solve(n):
if n > 0:
s = str(n)
k = ""
c = False
for i in s:
if int(i) < 5 and c == False:
k += "5" + i
c = True
else:
k += i
return int(k)
else:
k = ""
s = str(abs(n))
c = False
for i in s:
if int(i) > 5 and c == False:
k += "5" + i
c = True
else:
k += i
if not c:
k += "5"
return int("-" + k)
n = 834
print(solve(n))
ผลลัพธ์
8534
คำอธิบาย
834 → หลักแรกที่ < 5 คือ 3 (ตำแหน่งที่ 2) → แทรก 5 ก่อน 3 → 8534
กรณีลบ: -834 → ค่าสัมบูรณ์ 834 หาหลัก > 5 คือ 8 → แทรก 5 ก่อน 8 → 5834 → -5834 (ค่าลบที่มากกว่า -8345)