เมื่อคุณแปลงเศษส่วนเป็นตัวเลขทศนิยมและคุณต้องการเก็บตัวเลขนั้นคุณต้องปัดเศษเพราะคุณต้องการใช้หน่วยความจำจำนวนหนึ่งเท่านั้น สมมติว่าคุณสามารถเก็บได้ 5 หลักเท่านั้นจากนั้น 5/3 จะกลายเป็น 1.6667 หากคุณสามารถเก็บได้เพียง 2 หลักเท่านั้นมันจะเป็น 1.7 (ตอนนี้สมมติว่ามันอยู่ระหว่าง 0 ถึง 9.99 ... )
หากคุณพยายามย้อนกลับกระบวนการนั้นด้วย 1.7 และคุณต้องการได้รับเศษส่วนกลับมาซึ่งอาจเป็นเรื่องยากเนื่องจากคุณรู้ว่า 1.7 เป็นเพียงตัวเลขที่ปัดเศษ แน่นอนคุณสามารถลอง 17/10 ได้
ดังนั้นเป้าหมายคือการหาเศษ a / b ด้วยตัวส่วนที่น้อยที่สุด b ซึ่งส่งผลให้ตัวเลขทศนิยมที่ปัดเศษเมื่อปัดเศษอย่างถูกต้อง
รายละเอียด
อินพุตประกอบด้วยสตริงที่มีตัวเลข 1 ถึง 5 หลักที่อยู่ระหว่าง 0 (รวมถึง) และ 10 (ไม่รวม) ด้วย '.' หลังจากตัวเลขตัวแรก สมมุติว่าn
หมายถึงจำนวนหลัก ผลลัพธ์จะต้องเป็นรายการ / อาร์เรย์ของจำนวนเต็มสองจำนวน[numerator, denominator]
หรือประเภทข้อมูลที่มีเหตุผล (คุณสามารถสร้างของคุณเองหรือใช้ในตัว) โดยที่ตัวเศษไม่เป็นลบและตัวหารเป็นค่าบวก เศษ / เศษส่วนจะต้องเท่ากับการป้อนข้อมูลเมื่อถูกปัดเศษเป็นn
ตัวเลขอย่างถูกต้อง(ซึ่งหมายถึงn-1
ตัวเลขหลังจุดทศนิยม)
ข้อ จำกัด : อนุญาตให้ใช้คำสั่งวนซ้ำเดียวเท่านั้น ซึ่งหมายความว่าคุณสามารถใช้คำสั่งวนรอบเดียว (เช่นfor
หรือwhile
หรือgoto
อื่น ๆ เช่นเดียวกับห่วงการทำงานเช่นmap
หรือfold
ที่ใช้รหัสกับองค์ประกอบของรายการ / อาร์เรย์) ในรหัสทั้งหมดของคุณ แต่คุณมีอิสระที่จะ 'ละเมิด' มัน หรือใช้การสอบถามซ้ำเป็นต้น
คุณควรเขียนฟังก์ชั่น หากภาษาของคุณไม่มีฟังก์ชั่น (หรือแม้ว่าจะมี) คุณสามารถสมมติว่าอินพุตถูกเก็บไว้ในตัวแปร (หรืออินพุตผ่าน stdin) และพิมพ์ผลลัพธ์หรือเขียนลงในไฟล์ จำนวนไบต์ต่ำสุดชนะ
การล้อม
การปัดเศษควรเป็นไปตามกฎการปัดเศษ 'ตามธรรมเนียม' เช่นหากตัวเลขหลักสุดท้ายที่จะถูกตัดออกเป็น 5 หรือมากกว่าคุณจะปัดเศษขึ้นและคุณจะปัดเศษสำหรับกรณีอื่น ๆ เช่น:
4.5494 จะส่งผลให้ปัดเศษเป็น
- 1 หลัก: 5
- 2 หลัก: 4.5
- 3 หลัก: 4.55
- 4 หลัก: 4.549
ตัวอย่าง
โปรดระบุกรณีทดสอบต่อไปนี้และสิ่งที่น่าสนใจอื่น ๆ :
Input 1.7 Output 5/3
Input 0. Output 0/1
Input 0.001 Output 1/667
Input 3.1416 Output 355/113
for n in numbers: f(g(n))
map(f, map(g, numbers))
เวอร์ชั่นสำหรับการใช้งานนั้นใช้map
สองครั้งควรจะไม่ได้รับอนุญาตหรือไม่
repeat
สร้างรายการอาร์กิวเมนต์ที่ไม่มีที่สิ้นสุด ดูเหมือนว่าฉันจะวนซ้ำ แต่จริง ๆ แล้วมีความซับซ้อนของเวลา O (1) แต่ฉันเดาว่าการเรียงลำดับแต่ละกรณีนั้นดีกว่าไม่อนุญาตให้ใช้ภาษาที่ใช้งานได้