Ngày đã cho ở định dạng ngày, tháng và năm ở dạng số nguyên. Nhiệm vụ là tìm xem ngày đó có khả thi hay không.
Ngày hợp lệ phải nằm trong khoảng từ 1/1/1800 - 31/12/9999, những ngày sau những ngày này là không hợp lệ.
Những ngày này sẽ không chỉ chứa phạm vi năm mà còn chứa tất cả các ràng buộc liên quan đến ngày lịch.
Ràng buộc là -
- Ngày không được nhỏ hơn 1 và nhiều hơn 31
- Tháng không được nhỏ hơn 1 và nhiều hơn 12
- Năm không được nhỏ hơn 1800 và nhiều hơn 9999
- Khi các tháng là tháng 4, tháng 6, tháng 9, tháng 11, ngày không được quá 30.
- Khi đến tháng 2, chúng tôi phải kiểm tra xem
- Nếu năm là năm nhuận thì số ngày không được nhiều hơn 29
- Những ngày khác, số ngày không được nhiều hơn 28.
Nếu tất cả các ràng buộc là đúng thì đó là một ngày hợp lệ, Nếu không thì không.
Ví dụ
Input: y = 2002 d = 29 m = 11 Output: Date is valid Input: y = 2001 d = 29 m = 2 Output: Date is not valid
Thuật toán
START In function int isleap(int y) Step 1-> If (y % 4 == 0) && (y % 100 != 0) && (y % 400 == 0) then, Return 1 Step 2-> Else Return 0 In function int datevalid(int d, int m, int y) Step 1-> If y < min_yr || y > max_yr then, Return 0 Step 2-> If m < 1 || m > 12 then, Return 0 Step 3-> If d < 1 || d > 31 then, Return 0 Step 4-> If m == 2 then, If isleap(y) then, If d <= 29 then, Return 1 Else Return 0 End if End if Step 5-> If m == 4 || m == 6 || m == 9 || m == 11 then, If(d <= 30) Return 1 Else Return 0 Return 1 End Function In main(int argc, char const *argv[]) Step 1->Assign and initialize values as y = 2002, d = 29, m = 11 Step 2-> If datevalid(d, m, y) then, Print "Date is valid" Step 3-> Else Print "date is not valid” End main STOP
Ví dụ
#include <stdio.h> #define max_yr 9999 #define min_yr 1800 //to check the year is leap or not //if the year is a leap year return 1 int isleap(int y) { if((y % 4 == 0) && (y % 100 != 0) && (y % 400 == 0)) return 1; else return 0; } //Function to check the date is valid or not int datevalid(int d, int m, int y) { if(y < min_yr || y > max_yr) return 0; if(m < 1 || m > 12) return 0; if(d < 1 || d > 31) return 0; //Now we will check date according to month if( m == 2 ) { if(isleap(y)) { if(d <= 29) return 1; else return 0; } } //April, June, September and November are with 30 days if ( m == 4 || m == 6 || m == 9 || m == 11 ) if(d <= 30) return 1; else return 0; return 1; } int main(int argc, char const *argv[]) { int y = 2002; int d = 29; int m = 11; if(datevalid(d, m, y)) printf("Date is valid\n"); else printf("date is not valid\n"); return 0; }
Đầu ra
Nếu chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Date is valid