สิ่งนี้คล้ายกับเศษส่วนที่ทำให้ง่ายขึ้น แต่ใช้วันที่!
อินพุตของโปรแกรมของคุณจะต้องเป็นของแบบฟอร์มmm/dd
ตัวอย่างเช่น
3/4 //March 4
12/15 //December 15
1/1 // January 1
เราคิดว่าข้อมูลจะถูกต้องเช่นเดือนที่มีจำนวนวันเหล่านี้:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
งานของโปรแกรมของคุณคือการป้อนข้อมูลที่ถูกต้องสันนิษฐานและซ้ำแล้วซ้ำอีก (หรือเรียกซ้ำ) ทำให้วันที่ง่ายขึ้นและในแต่ละการวนซ้ำ (รวมทั้ง 0) ส่งออกวันที่ด้วยชื่อเต็มของเดือนตามที่เขียนไว้ด้านบน
ตัวอย่างเช่น:
รับอินพุต:
12/18
จะเอาท์พุท
December 18
June 9
February 3
อินพุตที่ถูกทำให้เรียบง่ายเอาต์พุตเท่านั้นเอง:
11/17
ขาออก:
November 17
ชื่อเดือนไม่สามารถมาจากฟังก์ชั่นในภาษาของคุณ สตริงสามารถทำให้ยุ่งเหยิงคำนวณ แต่คุณชอบ แต่คุณไม่สามารถใช้ฟังก์ชั่นมาตรฐานเช่น GetMonthString (4) หรืออะไรคุณต้องเขียนฟังก์ชั่นนั้นหรือหาวิธีที่จะส่งออกชื่อเดือนตามที่อธิบายไว้
ฉันไม่สามารถนึกถึงกรณีใด ๆ ที่วันที่เรียบง่ายสร้างวันที่ผิดกฎหมาย แต่ถ้าคุณเคยสร้างวันที่ผิดกฎหมายไปพร้อมกันผลลัพธ์:
Illegal Date
แต่ถ้าคุณแน่ใจว่าสิ่งนี้ไม่สามารถเกิดขึ้นได้คุณไม่จำเป็นต้องมีรหัสครอบคลุมกรณีนี้ วันที่แสดงผลจะต้องถูกต้องเสมอตามสิ่งที่อธิบายไว้ข้างต้น (ไปโดยไม่บอกว่าเดือนและวันเริ่มต้นที่ 1)
อัลกอริทึม:
ในการวนซ้ำแต่ละครั้งคุณหารด้วยจำนวนที่เล็กที่สุดที่หารตัวเศษและส่วน
นั่นคือคุณจะพบตัวเลขทั้งหมดเช่นนั้นหารทั้งตัวเศษและส่วนด้วยตัวเลขนี้จะสร้างตัวเศษและส่วนที่ใหม่ซึ่งเป็นทั้งจำนวนเต็ม (ปัจจัยทั่วไป) เลือกอันที่เล็กที่สุดแล้วหารตัวเศษและส่วนเพื่อแยกเศษส่วนใหม่ หากตัวเลขเพียงตัวเดียวที่คุณสามารถหารด้วย 1 คุณจะต้องทำให้ง่ายที่สุดและหยุด
ฉันหวังว่านี่ชัดเจน
ภาษาใดก็ได้ที่ได้รับอนุญาต นี่คือรหัสกอล์ฟรหัสที่สั้นที่สุดชนะ!
12/18
ถึง6/9
และไม่4/6
(ฉันไม่ได้รับการทำซ้ำทั้งหมด ... เมื่อฉันทำให้เศษส่วนน้อยลง