# Find the first day of a given year from a base year having first day as Monday

Given two integers Y and B representing two years, the task is to find the day of the week in which 1st January of the year Y lies assuming that 1st January of the year B was a Monday.

Examples:

Input:
Y = 2020
B = 1900
Output:
Wednesday
Explanation:
01/01/2020 was a Wednesday considering that 01/01/1900 was a Monday

Input:
Y = 2020
B = 1905
Output:
Thursday
Explanation:
01/01/2020 was a Wednesday assuming that 01/01/1905 was a Monday

Approach: Follow the steps below to solve the problem:

1. Total years lying between base year (B) and the year (Y) is equal to (Y – 1) – B.
2. Total number of leap years lying in between = Total years / 4
3. Total number of non-leap years in between = Total Years – Leap Years.
4. Total Days = Total Leap Years * 366 + Non-Leap Years * 365 + 1.
5. Therefore, the day of the 1st January of Y is Total Days % 7.

Below is the implementation of the above approach:

## C++14

 `// C++ Implementation of` `// the above approach`   `#include ` `using` `namespace` `std;`   `// Function to find the day of` `// 1st January of Y year` `void` `findDay(``int` `Y, ``int` `B)` `{` `    ``int` `lyear, rest, totaldays, day;`   `    ``// Count years between` `    ``// years Y and B` `    ``Y = (Y - 1) - B;`   `    ``// Count leap years` `    ``lyear = Y / 4;`   `    ``// Non leap years` `    ``rest = Y - lyear;`   `    ``// Total number of days in the years` `    ``// lying between the years Y and B` `    ``totaldays = (rest * 365)` `                ``+ (lyear * 366) + 1;`   `    ``// Actual day` `    ``day = (totaldays % 7);`   `    ``if` `(day == 0)` `        ``printf``(``"Monday"``);`   `    ``else` `if` `(day == 1)` `        ``printf``(``"Tuesday"``);`   `    ``else` `if` `(day == 2)` `        ``printf``(``"Wednesday"``);`   `    ``else` `if` `(day == 3)` `        ``printf``(``"Thursday"``);`   `    ``else` `if` `(day == 4)` `        ``printf``(``"Friday"``);`   `    ``else` `if` `(day == 5)` `        ``printf``(``"Saturday"``);`   `    ``else` `if` `(day == 6)` `        ``printf``(``"Sunday"``);`   `    ``else` `        ``printf``(``"INPUT YEAR IS WRONG!"``);` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `Y = 2020, B = 1900;` `    ``findDay(Y, B);`   `    ``return` `0;` `}`

## Java

 `// Java program to implement ` `// the above approach ` `import` `java.util.*;`   `class` `GFG` `{`   `  ``// Function to find the day of` `  ``// 1st January of Y year` `  ``static` `void` `findDay(``int` `Y, ``int` `B)` `  ``{` `    ``int` `lyear, rest, totaldays, day;`   `    ``// Count years between` `    ``// years Y and B` `    ``Y = (Y - ``1``) - B;`   `    ``// Count leap years` `    ``lyear = Y / ``4``;`   `    ``// Non leap years` `    ``rest = Y - lyear;`   `    ``// Total number of days in the years` `    ``// lying between the years Y and B` `    ``totaldays = (rest * ``365``)` `      ``+ (lyear * ``366``) + ``1``;`   `    ``// Actual day` `    ``day = (totaldays % ``7``);`   `    ``if` `(day == ``0``)` `      ``System.out.println(``"Monday"``);`   `    ``else` `if` `(day == ``1``)` `      ``System.out.println(``"Tuesday"``);`   `    ``else` `if` `(day == ``2``)` `      ``System.out.println(``"Wednesday"``);`   `    ``else` `if` `(day == ``3``)` `      ``System.out.println(``"Thursday"``);`   `    ``else` `if` `(day == ``4``)` `      ``System.out.println(``"Friday"``);`   `    ``else` `if` `(day == ``5``)` `      ``System.out.println(``"Saturday"``);`   `    ``else` `if` `(day == ``6``)` `      ``System.out.println(``"Sunday"``);`   `    ``else` `      ``System.out.println(``"INPUT YEAR IS WRONG!"``);` `  ``}`   `  ``// Driver code` `  ``public` `static` `void` `main(String[] args)` `  ``{` `    ``int` `Y = ``2020``, B = ``1900``;` `    ``findDay(Y, B);` `  ``}` `}`   `// This code is contributed by code_hunt.`

## Python3

 `# Python program to implement` `# the above approach`   `# Function to find the day of` `# 1st January of Y year` `def` `findDay(Y, B):` `    ``lyear, rest, totaldays, day ``=` `0``, ``0``, ``0``, ``0``;`   `    ``# Count years between` `    ``# years Y and B` `    ``Y ``=` `(Y ``-` `1``) ``-` `B;`   `    ``# Count leap years` `    ``lyear ``=` `Y ``/``/` `4``;`   `    ``# Non leap years` `    ``rest ``=` `Y ``-` `lyear;`   `    ``# Total number of days in the years` `    ``# lying between the years Y and B` `    ``totaldays ``=` `(rest ``*` `365``) ``+` `(lyear ``*` `366``) ``+` `1``;`   `    ``# Actual day` `    ``day ``=` `(totaldays ``%` `7``);`   `    ``if` `(day ``=``=` `0``):` `        ``print``(``"Monday"``);`   `    ``elif` `(day ``=``=` `1``):` `        ``print``(``"Tuesday"``);`   `    ``elif` `(day ``=``=` `2``):` `        ``print``(``"Wednesday"``);`   `    ``elif` `(day ``=``=` `3``):` `        ``print``(``"Thursday"``);`   `    ``elif` `(day ``=``=` `4``):` `        ``print``(``"Friday"``);`   `    ``elif` `(day ``=``=` `5``):` `        ``print``(``"Saturday"``);`   `    ``elif` `(day ``=``=` `6``):` `        ``print``(``"Sunday"``);`   `    ``else``:` `        ``print``(``"INPUT YEAR IS WRONG!"``);`   `# Driver code` `if` `__name__ ``=``=` `'__main__'``:` `    ``Y ``=` `2020``; B ``=` `1900``;` `    ``findDay(Y, B);`   `# This code is contributed by 29AjayKumar`

## C#

 `// C# program to implement ` `// the above approach ` `using` `System;` `class` `GFG ` `{` `  ``// Function to find the day of` `  ``// 1st January of Y year` `  ``static` `void` `findDay(``int` `Y, ``int` `B)` `  ``{` `    ``int` `lyear, rest, totaldays, day;`   `    ``// Count years between` `    ``// years Y and B` `    ``Y = (Y - 1) - B;`   `    ``// Count leap years` `    ``lyear = Y / 4;`   `    ``// Non leap years` `    ``rest = Y - lyear;`   `    ``// Total number of days in the years` `    ``// lying between the years Y and B` `    ``totaldays = (rest * 365)` `      ``+ (lyear * 366) + 1;`   `    ``// Actual day` `    ``day = (totaldays % 7);` `    ``if` `(day == 0)` `      ``Console.WriteLine(``"Monday"``);` `    ``else` `if` `(day == 1)` `      ``Console.WriteLine(``"Tuesday"``);` `    ``else` `if` `(day == 2)` `      ``Console.WriteLine(``"Wednesday"``);` `    ``else` `if` `(day == 3)` `      ``Console.WriteLine(``"Thursday"``);` `    ``else` `if` `(day == 4)` `      ``Console.WriteLine(``"Friday"``);` `    ``else` `if` `(day == 5)` `      ``Console.WriteLine(``"Saturday"``);` `    ``else` `if` `(day == 6)` `      ``Console.WriteLine(``"Sunday"``);` `    ``else` `      ``Console.WriteLine(``"INPUT YEAR IS WRONG!"``);` `  ``}`   `// Driver code` `static` `void` `Main() ` `{` `    ``int` `Y = 2020, B = 1900;` `    ``findDay(Y, B);` `}` `}`   `// This code is contribute by susmitakundugoaldanga`

## Javascript

 ``

Output:

`Wednesday`

Time Complexity: O(1)
Auxiliary Space: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next