30/09/2018, 17:13

Xác định năm này có phải là năm nhuận hay không?

Dữ liệu đầu vào là 1 chuỗi viết theo định dạng sau: ngày/tháng/năm, trong đó:

  • ngày là một số nguyên dương >= 1 và <=31
  • tháng là một số nguyên dương >=1 và <=12
  • năm là một số nguyên dương >=1 và <=10000
    Yêu cầu: Xuất ra 2 dòng
  • Dòng 1: xác định năm này có phải là năm nhuận hay không?
    Nếu năm nhuận thì ghi là YES
    Ngược lại ghi là NO
  • Dòng 2: kết quả phép toán: ngày + tháng + năm, ghi theo cấu trúc:
    Ngày+tháng+năm=KếtQuả

Ví dụ:

Input:

28/5/2015

Output:

NO
28+5+2015=2048

Ghi chú: cách xác định năm nhuận: năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 mà không chia hết cho 100
Ví dụ:
Năm 1800 không phải là năm nhuận
Năm 2000 là năm nhuận

Tâm Ninja viết 19:18 ngày 30/09/2018

Ghi chú: cách xác định năm nhuận: năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 mà không chia hết cho 100

Khác nào chỉ cần chia hết cho 4?

Minh Hoàng viết 19:14 ngày 30/09/2018

năm 700 hoặc năm 900 thì không thỏa điều kiện bạn ơi.


bài này bạn chỉ cần mô tả điều kiện phù hợp là được thôi. Cố lên bạn.

Nguyễn Trí Dân viết 19:26 ngày 30/09/2018

4 năm 1 lần có 1 năm nhuận, mà năm nhuận gần nhất là 2012 mod 4 = 0 => năm nhuận là năm chia hết cho 4 thôi mà ?

X viết 19:29 ngày 30/09/2018

Ghi chú: cách xác định năm nhuận: năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 mà không chia hết cho 100

như thế này mới đủ @ntridan

buithaiminh viết 19:26 ngày 30/09/2018

Lấy 2 số cuối mà chia hết cho 4 là đủ kết luận năm nhuận.

Nguyễn Trí Dân viết 19:16 ngày 30/09/2018

Mình vẫn thấy có gì đó k logic. Năm chia hết cho 400 hoặc chia hết cho 4không chia hết cho 100.
Năm chia hết cho 400 thì tất nhiên là chia hết cho 4 rồi, còn chia hết cho 4 mà không chia hết cho 100 là những năm mà số của nó chia hết cho 4 còn lại (những năm không chia hết cho 400). Một số chia hết cho 400 là một số vừa chia hết cho 4 vừa chia hết cho 100 đúng không nhỉ ?

X viết 19:25 ngày 30/09/2018

Nếu chỉ chia hết cho 4 là năm nhuận vậy thì các năm 1800, 1900 là nhuận hết sao

Thành Phạm viết 19:17 ngày 30/09/2018

Nếu chỉ chia hết cho 4 là năm nhuận vậy thì các năm 1800, 1900 là nhuận hết sao

Hình như là lịch mình đang dùng có sự cộng thêm/bớt đi gì đó nên mới có hiện tượng này thì phải

Nguyễn Trí Dân viết 19:27 ngày 30/09/2018

Ừ vì 1800 nó chia hết cho 400, còn 1900 nó chia hết cho 4 mà không chia hết cho 100 (Theo như điều kiện logic của bài toán :)))
Điều kiện là (n chia hết cho 4) hoặc (n chia hết cho 4 mà không chia hết cho 100) mà :v Thỏa 1 trong 2 điều kiện trên máy sẽ trả kết quả là TRUE :))

Ghi chú: cách xác định năm nhuận: năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 mà không chia hết cho 100

Thành Phạm viết 19:17 ngày 30/09/2018


vi.wikipedia.org

Năm nhuận

Năm nhuận là năm: để đảm bảo đồng bộ việc lặp lại của năm trên lịch với năm thiên văn hay năm thời tiết. Trong trường hợp dương lịch thì các mùa và các sự kiện thiên văn không lặp lại chính xác sau một số nguyên các ngày, vì thế năm dương lịch cứ sau một khoảng thời gian nhất định phải thêm vào một ngày để đảm bảo việc chỉnh lại các sai số do làm tròn năm. Trong trường hợp âm dương lịch như lịch Trung Quốc thì do một chu kỳ quay của Mặt Trăng quanh Trái Đất là khoảng 29,53 ngày nên một năm âm ...

##Lịch Gregorius
Theo lịch Gregorius - loại lịch tiêu chuẩn hiện nay được dùng trên hầu khắp thế giới thì những năm nào chia hết cho 4 được coi là năm nhuận. Trong năm nhuận, tháng 2 có 29 ngày thay cho 28 ngày. Cứ 4 năm lại thêm 1 ngày vào lịch bởi vì một năm dương lịch dài khoảng 365 ngày và 6 giờ.Ngoài ra, vẫn có một số ngoại lệ đối với nguyên tắc này vì một năm dương lịch ngắn hơn 365,25 ngày một chút. Những năm chia hết cho 100 chỉ được coi là năm nhuận nếu chúng cũng chia hết cho 400. Ví dụ, 1600 và 2000 là các năm nhuận nhưng 1700, 1800 và 1900 không phải năm nhuận. Tương tự như vậy, 2100, 2200, 2300, 2500, 2600, 2700, 2900 và 3000 không phải năm nhuận nhưng 2400 và 2800 là các năm nhuận.

Theo nguyên tắc này thì trung bình một năm có 365 + 1/4 − 1/100 + 1/400 = 365,2425 ngày, tức là 365 ngày 5 giờ 49 phút và 12 giây. Lý do nằm sau quy tắc này như sau:Lịch Gregory được tạo ra để đảm bảo ngày xuân phân ở châu Âu rơi vào ngày 21 tháng 3, để đảm bảo ngày lễ Phục Sinh có thể điều chỉnh theo ngày xuân phân một cách rõ ràng hơn.Một năm xuân phân (tính giữa hai điểm xuân phân kế tiếp nhau) là khoảng 365,242375 ngày.Quy tắc tính năm nhuận theo lịch Gregory lấy một năm trung bình là 365,2425 ngày.

Sự sai khác rất nhỏ này (trên 0,0001 ngày) có nghĩa là sai số thời gian sẽ tích lũy đủ một ngày trong khoảng 8.000 năm. Nhưng trong thời gian của 8.000 năm thì độ dài của một năm xuân phân cũng sẽ thay đổi theo một lượng mà người ta không thể dự báo chính xác trước (xem dưới đây). Vì thế quy tắc tính năm nhuận của lịch Gregory là đủ thỏa mãn.

HowStuffWorks – 1 Apr 00

How could the year 2000 be a leap year when 1900 was not?

February is an unusual month, especially when it comes to leap years. In this article, you can read about why we use leap years and how the year 2000 was a leap year and 1900 was not.

Nguyễn Trí Dân viết 19:27 ngày 30/09/2018

Nói chung mình thấy điều kiện logic của bài toán có vấn đề, nếu mình là cái máy tính thực hiện thuật toán này thì khi gặp năm 1900 mình vẫn sẽ trả giá trị là TRUE do nó vẫn chia hết cho 4

Ghi chú: cách xác định năm nhuận: năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 mà không chia hết cho 100

Thành Phạm viết 19:26 ngày 30/09/2018

Nói chung mình thấy điều kiện logic của bài toán có vấn đề, nếu mình là cái máy tính thực hiện thuật toán này thì khi gặp năm 1900 mình vẫn sẽ trả giá trị là TRUE do nó vẫn chia hết cho 4

Trong link kia có nói thế này , khả năng là có liên quan

This is related to the Year 2000 problem, because many computer programs would have calculated the leap year incorrectly in the year 2000.

(sự kiện Y2K)

Nguyễn Trí Dân viết 19:28 ngày 30/09/2018

Không biết có cách nào để làm thuật toán này chính xác hơn không nhỉ :))

Minh Hoàng viết 19:24 ngày 30/09/2018

tiên đề mà bạn biết có vấn đề thôi, chứ logic của bạn thì không có vấn đề gì cả.
1900 chia hết cho 100 nên nó không thỏa đó bạn. nếu nó có dạng xx00 thì nó phải chia hết cho 400 thì nó mới là năm nhuận.

Nguyễn Trí Dân viết 19:17 ngày 30/09/2018

Nãy giờ đúng là suy nghĩ của mình có vấn đề =)) chính mình đang phủ định mình :)) Điều kiện đúng rồi :)) Giờ mới thấy

X viết 19:27 ngày 30/09/2018

Ừ vì 1800 nó chia hết cho 400, còn 1900 nó chia hết cho 4 mà không chia hết cho 100 (Theo như điều kiện logic của bài toán :)))Điều kiện là (n chia hết cho 4) hoặc (n chia hết cho 4 mà không chia hết cho 100) mà :v Thỏa 1 trong 2 điều kiện trên máy sẽ trả kết quả là TRUE :))

Theo ý ban đầu của bạn là chỉ cần chia hết cho 4 thôi mà =))

Nguyễn Trí Dân viết 19:15 ngày 30/09/2018

Thì bởi, mình nhầm =))

Tâm Ninja viết 19:28 ngày 30/09/2018

4 năm nhuận 1 lần thì chia hết cho 4 là nhuận thôi chứ nhở?

Thành Phạm viết 19:23 ngày 30/09/2018

Ngoài ra, vẫn có một số ngoại lệ đối với nguyên tắc này vì một năm dương lịch ngắn hơn 365,25 ngày một chút. Những năm chia hết cho 100 chỉ được coi là năm nhuận nếu chúng cũng chia hết cho 400. Ví dụ, 1600 và 2000 là các năm nhuận nhưng 1700, 1800 và 1900 không phải năm nhuận. Tương tự như vậy, 2100, 2200, 2300, 2500, 2600, 2700, 2900 và 3000 không phải năm nhuận nhưng 2400 và 2800 là các năm nhuận.

Theo nguyên tắc này thì trung bình một năm có 365 + 1/4 − 1/100 + 1/400 = 365,2425 ngày, tức là 365 ngày 5 giờ 49 phút và 12 giây. Lý do nằm sau quy tắc này như sau:Lịch Gregory được tạo ra để đảm bảo ngày xuân phân ở châu Âu rơi vào ngày 21 tháng 3, để đảm bảo ngày lễ Phục Sinh có thể điều chỉnh theo ngày xuân phân một cách rõ ràng hơn.Một năm xuân phân (tính giữa hai điểm xuân phân kế tiếp nhau) là khoảng 365,242375 ngày.Quy tắc tính năm nhuận theo lịch Gregory lấy một năm trung bình là 365,2425 ngày.

(Trích wikipedia )

Tâm Ninja viết 19:24 ngày 30/09/2018

Ra là không đơn giản chỉ là 4 năm 1 lần.

Bài liên quan
0