Thuật toán kiểm tra năm nhuận trong C / C++
Trong bài viết này, codehow sẽ giới thiệu các bạn thuật toán kiểm tra nằm nhuận trong C / C++. Mình sẽ đưa ra thuật toán kiểm tra nằm nhuận và các ví dụ thực tế xoay quanh nó để các bạn có thể luyện tập.
Trước khi đi vào viết thuật toán, chúng ta cần tìm hiểu xem năm nhuận là gì? Quy luật của nó ra sao đã nhé. Bất kì bài toán nào chúng ta cũng cần tìm hiểu và nghiên cứu ra quy luật của nó rồi mới thực hiện viết chương trình.
Năm nhuận là gì? Quy luật tính năm nhuận
Trong bài viết này, mình sẽ không giải thích chi tiết về nguyên nhân hình thành ra năm nhuận. Bởi nó không năm trong chuyện mục của bài viết.
Mình sẽ giải thích đơn giản cho các bạn dễ hiểu thôi nhé.
Tính theo lịch dương thì năm nhuận sẽ có thêm một ngày vào tháng 2, tức là tháng hai sẽ có 29 ngày.
Tính theo lịch âm thì năm nhuận sẽ có thêm một tháng, cứ mỗi 4 năm sẽ có thêm một tháng âm lịch.
Dựa vào các tính chất này của năm nhuận, chúng ta có quy luật tính năm nhuận như sau:
Ví dụ: Mình có năm 2000 là năm nhuận vì nó vừa chia hết cho 4, 100 và 400. Năm 2020 cũng là năm nhuận vì nó chia hết cho 4.
Thuật toán kiểm tra năm nhuận trong C / C++
Dựa vào định nghĩa và quy luật mình đã đưa ra ở trên, chúng ta có thể xây dựng thuật toán kiểm tra năm nhuận trong C / C++ như sau:
bool nam_nhuan(int year) { if (year % 100 == 0) { if (year % 400 == 0){ return true; } else{ return false. } } else if (year % 4 == 0) { return true; } else{ return false; } }
Giải thích thuật toán:
- Đầu tiên chúng ta sẽ xét điều kiện năm đó có chia hết cho một trăm hay không. Nếu chia hết cho 100 và chia hết cho 400 thì đây là năm nhuận, ngược lại thì không phải năm nhuận.
- Tiếp đến xét điều kiện nếu năm đó chia hết cho 4 thì là năm nhuận.
- Tất cả các trường hợp còn lại không phải là năm nhuận.
Ví dụ thuật toán kiểm tra năm nhuận trong C / C++
Bây giờ, chúng ta sẽ đi xây dựng chương trình kiểm tra năm nhuận, in các năm nhuận dựa vào thuật toán đã đưa ra ở trên nhé.
Ví dụ 1: Viết chương trình kiểm tra năm nhuận của một năm được nhập vào từ bàn phím.
Chương trình C:
#include <stdio.h> int main(void) { int y; printf("Nhập vào năm bạn cần kiểm tra: "); scanf("%d", &y); if(y % 4 == 0) { if( y % 100 == 0) { if ( y % 400 == 0) printf("%d là năm nhuận", y); else printf("%d không phải là năm nhuận", y); } else printf("%d là năm nhuận", y); } else printf("%d không phải là năm nhuận", y); printf("\n-------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Kết quả:
Chương trình C++:
#include <iostream> using namespace std; int main() { int y; cout<<"Nhập vào năm bạn cần kiểm tra: "; cin>>y; if(y % 4 == 0) { if( y % 100 == 0) { if ( y % 400 == 0) cout<<y<<" là năm nhuận"; else cout<<y<<" không phải là năm nhuận"; } else cout<<y<<" là năm nhuận"; } else cout<<y<<" không phải là năm nhuận"; cout<<"\n-----------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; }
Kết quả:
Ví dụ 2: In các năm nhuận trong một phạm vi nhất đinh được nhập bởi người dùng.
Chương trình C:
#include <stdio.h> #include <stdbool.h> void laNamNhuan(int end, int start){ printf("Các năm nhuận là: "); for(int i = start; i <= end; i++){ if(i % 4 == 0) { if( i % 100 == 0) { if ( i % 400 == 0) printf("%d ", i); } else printf("%d ", i); } } } int main(void) { int end, start; printf("Nhập vào năm bắt đầu: "); scanf("%d", &start); printf("Nhập vào năm kết thúc: "); scanf("%d", &end); laNamNhuan(end, start); printf("\n-------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Chương trình C++:
#include <iostream> using namespace std; void laNamNhuan(int end, int start){ cout<<"Các năm nhuận là: "; for(int i = start; i <= end; i++){ if(i % 4 == 0) { if( i % 100 == 0) { if ( i % 400 == 0) cout<<i<<" "; } else cout<<i<<" "; } } } int main() { int end, start; cout<<"Nhập vào năm bắt đầu: "; cin>>start; cout<<"Nhập vào năm kết thúc: "; cin>>end; laNamNhuan(end, start); cout<<"\n-----------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; }
Kết quả:
Như vậy là chúng ta đã cùng nhau tìm hiểu về thuật toán kiểm tra năm nhuận trong C / C++. Các bạn hãy luyện tập thật nhiều các bài toán đơn giản như vậy để nắm cững kiến thức nhé. Như vậy chúng ta mới có thể giải quyết các bài toán phức tạp hơn, chúc các bạn thành công !!!