สมมติว่าเรามีโรงงานลูกบอลที่เรามีลูก 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