สมมติว่าเรามีโรงงานลูกบอลที่เรามีลูก n ลูกตั้งแต่ l ถึง r (รวมทั้งสองอย่าง) และมีจำนวนกล่องนับไม่ถ้วนตั้งแต่ 1 ถึงอินฟินิตี้ ดังนั้นถ้าเราใส่ลูกบอลแต่ละลูกในกล่องที่มีตัวเลขเดียวกันกับผลรวมของตัวเลขของลูกบอล (เช่น บอลหมายเลข 123 จะถูกใส่ในช่องหมายเลข 1 + 2 + 3 =6) ดังนั้นหากเรามีสองค่า l และ r เราต้องหาจำนวนลูกบอลในกล่องที่มีลูกบอลมากที่สุด
ดังนั้น หากอินพุตเป็น l =15 r =25 เอาต์พุตจะเป็น 2 เพราะ
-
บอลหมายเลข 15 จะใส่เข้าไป 1+5 =6
-
บอลหมายเลข 16 จะใส่เข้าไป 1+6 =7
-
ลูกเบอร์ 17 จะใส่เข้าไป 1+7 =8
-
บอลหมายเลข 18 จะใส่เข้าไป 1+8 =9
-
บอลหมายเลข 19 จะใส่เข้าไป 1+9 =10
-
ลูกบอลหมายเลข 20 จะถูกใส่เข้าไปข้างใน 2+0 =2
-
บอลหมายเลข 21 จะใส่เข้าไป 2+1 =3
-
ลูกบอลหมายเลข 22 จะถูกใส่เข้าไปข้างใน 2+2 =4
-
ลูกบอลหมายเลข 23 จะถูกใส่เข้าไปภายใน 2+3 =5
-
ลูกบอลหมายเลข 24 จะถูกใส่เข้าไปข้างใน 2+4 =6
-
ลูกบอลหมายเลข 25 จะถูกใส่เข้าไปข้างใน 2+5 =7
ดังนั้นกล่อง 6 และ 7 มีจำนวนลูกบอลสูงสุด นั่นคือเหตุผลที่คำตอบคือ 2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
dict:=แผนที่ใหม่
-
สำหรับฉันอยู่ในช่วง l ถึง r ทำ
-
ทั้งหมด:=0
-
สำหรับแต่ละหลัก j ของ i ทำ
-
รวม :=รวม + j
-
-
ถ้ายอดรวมไม่มีอยู่ใน dict แล้ว
-
dict[รวม] :=0
-
-
dict[รวม] :=dict[รวม] + 1
-
-
คืนค่าสูงสุดของค่าทั้งหมดสำหรับคีย์ทั้งหมดใน dict
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(l, r):
dict={}
for i in range(l, r+1):
total=0
for j in str(i):
total += int(j)
if(total not in dict):
dict[total] = 0
dict[total] += 1
return max([dict[i] for i in dict])
l = 15
r = 25
print(solve(l, r)) อินพุต
15, 25
ผลลัพธ์
1