เรามีจำนวนจุดลอยr
ระหว่าง 0 และ 1, p
และจำนวนเต็ม
ค้นหาเศษส่วนของจำนวนเต็มด้วยตัวหารที่เล็กที่สุดซึ่งใกล้เคียงr
กับp
ความแม่นยำอย่างน้อย-digit
- อินพุต:
r
(หมายเลขจุดลอยตัว) และp
(จำนวนเต็ม) - ผลลัพธ์:
a
และb
จำนวนเต็มโดยที่a/b
(ลอย) ประมาณr
จนกระทั่งp
ตัวเลขb
เป็นไปได้ที่น้อยที่สุดเช่นจำนวนเต็มบวก
ตัวอย่างเช่น:
- ถ้า
r=0.14159265358979
และp=9
, - แล้วผลที่ได้คือ
a=4687
และb=33102
, 4687/33102=0.1415926530119026
เพราะ
การแก้ปัญหาใด ๆ จะต้องทำงานในทางทฤษฎีด้วยความแม่นยำโดยพลการ
แม่นยำหมายถึงจำนวนของตัวเลขหลังจากที่ " 0.
" r
ใน ดังนั้นหากr=0.0123
และp=3
แล้วควรเริ่มต้นด้วยa/b
0.012
หากp
ตัวเลขแรกของส่วนที่เป็นเศษส่วนของr
0 เป็นพฤติกรรมที่ไม่ได้กำหนดเป็นที่ยอมรับ
เกณฑ์การชนะ:
- อัลกอริทึมเร็วที่สุดชนะ ความเร็วถูกวัดใน O (p)
- หากมีอัลกอริธึมที่เร็วที่สุดหลายตัว
- คำตอบของฉันถูกแยกออกจากกลุ่มผู้ชนะที่เป็นไปได้
ps คณิตศาสตร์ส่วนที่เป็นจริงได้ง่ายขึ้นมากเป็นดูเหมือนว่าฉันขอแนะนำให้อ่านนี้โพสต์
padEnd
และmatch
? คุณไม่สามารถslice
แยกความยาวให้ถูกต้องแล้วลบออกได้ไหม