Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

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

  • Difficulty Level : Medium
  • Last Updated : 04 May, 2021

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:

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

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 <bits/stdc++.h>
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




<script>
 
// Javascript program of the above approach
 
  // Function to find the day of
  // 1st January of Y year
  function findDay(Y, B)
  {
    let lyear, rest, totaldays, day;
  
    // Count years between
    // years Y and B
    Y = (Y - 1) - B;
  
    // Count leap years
    lyear = Math.floor(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)
      document.write("Monday");
  
    else if (day == 1)
      document.write("Tuesday");
  
    else if (day == 2)
      document.write("Wednesday");
  
    else if (day == 3)
      document.write("Thursday");
  
    else if (day == 4)
      document.write("Friday");
  
    else if (day == 5)
      document.write("Saturday");
  
    else if (day == 6)
      document.write("Sunday");
  
    else
      document.write("INPUT YEAR IS WRONG!");
  }
 
    // Driver Code
     
    // Given array
    let Y = 2020, B = 1900;
    findDay(Y, B);
  
</script>
Output: 
Wednesday

 

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




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!