LATEST

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:

Năm nhuận là năm chia hết cho 4, trong trường hợp vừa chia hết cho 4 vừa chia hết cho 100 thì phải chia hết cho 400. Tuy nhiên quy luật này chỉ gần đúng mà thôi, nhưng chúng ta có thể áp dụng nó để xây dựng chương trình kiểm tra năm nhuận.

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 !!!

Cùng chuyên mục:

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán tính lũy thừa trong C / C++

Thuật toán tính lũy thừa trong C / C++

Thuật toán tìm ước chung lớn nhất trong C / C++

Thuật toán tìm ước chung lớn nhất trong C / C++

Top