Open In App

Find the number of times every day occurs in a month

Last Updated : 16 Oct, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given the starting day and the number of days in a month. Find the number of times every day occurs in a month 
Examples: 

Input: Number of days in month = 28 
        First day = Wednesday 
Output: Monday = 4  
         Tuesday = 4 
         Wednesday = 4 
         Thursday = 4 
         Friday = 4 
         Saturday = 4 
         Sunday = 4
Explanation: In the month of February, 
every day occurs 4 times.  

Input: Number of days in  month = 31  
        First day = Tuesday  
Output: Monday = 4  
         Tuesday = 5 
         Wednesday = 5 
         Thursday = 5  
         Friday = 4 
         Saturday = 4 
         Sunday = 4 
Explanation: The month starts on Tuesday 
and ends on Thursday. 

 

Observations: We have to make some key observations. First one will be if the month has 28 days then every day occurs 4 times. The second one will be if it has 29 days then the day on which the month starts will occur 5 times. The third one will be if the month has 30 days, then the day on which the month starts and the next day will occur 5 days. The last one is if the month has 31 days, then the day on which the month starts and the next 2 days will occur 5 days with the rest occurring 4 times each. 
Approach: Create an count array with size 7 and having an initial value of 4 as the minimum number of occurrence will be 4. (number of days-28). Find the index of the firstday. Calculate the number of days whose occurrence will be 5. Then run a loop from pos to pos+(number of days-28) to mark the occurrence as 5. If pos+(number of days-28) exceeds 6, then use %7 to get to the indexes from the beginning. 

Below is the C++ implementation of the above approach: 

CPP




// C++ program to count occurrence of days in a month
#include <bits/stdc++.h>
using namespace std;
 
// function to find occurrences
void occurrenceDays(int n, string firstday)
{
    // stores days in a week
    string days[] = { "Monday", "Tuesday", "Wednesday",
           "Thursday""Friday", "Saturday", "Sunday" };
 
    // Initialize all counts as 4.
    int count[7];
    for (int i = 0; i < 7; i++)
        count[i] = 4;
 
    // find index of the first day
    int pos;
    for (int i = 0; i < 7; i++) {
        if (firstday == days[i]) {
            pos = i;
            break;
        }
    }
 
    // number of days whose occurrence will be 5
    int inc = n - 28;
 
    // mark the occurrence to be 5 of n-28 days
    for (int i = pos; i < pos + inc; i++) {
        if (i > 6)
            count[i % 7] = 5;
        else
            count[i] = 5;
    }
 
    // print the days
    for (int i = 0; i < 7; i++) {
        cout << days[i] << " " << count[i] << endl;
    }
}
 
// driver program to test the above function
int main()
{
    int n = 31;
    string firstday = "Tuesday";
    occurrenceDays(n, firstday);
    return 0;
}


Java




// Java program to count
// occurrence of days in a month
import java.util.*;
import java.lang.*;
 
public class GfG{
 
    // function to find occurrences
    public static void occurrenceDays(int n, String firstday)
    {
        // stores days in a week
        String[] days = new String[]{ "Monday",
                "Tuesday", "Wednesday",
                "Thursday", "Friday",
                "Saturday", "Sunday" };
         
        // Initialize all counts as 4.
        int[] count = new int[7];
        for (int i = 0; i < 7; i++)
            count[i] = 4;
         
        // find index of the first day
        int pos = 0;
        for (int i = 0; i < 7; i++)
        {
            if (firstday == days[i])
            {
                pos = i;
                break;
            }
        }
         
        // number of days whose occurrence
        // will be 5
        int inc = n - 28;
         
        // mark the occurrence to be 5 of n-28 days
        for (int i = pos; i < pos + inc; i++)
        {
            if (i > 6)
                count[i % 7] = 5;
            else
                count[i] = 5;
        }
         
        // print the days
        for (int i = 0; i < 7; i++)
        {
            System.out.println(days[i] + " " + count[i]);
        }
    }
     
    // Driver function
    public static void main(String argc[]){
        int n = 31;
        String firstday = "Tuesday";
        occurrenceDays(n, firstday);
    }
}
 
// This code is contributed by Sagar Shukla


Python3




# Python program to count
# occurrence of days in a month
import math
 
# function to find occurrences
def occurrenceDays( n, firstday):
 
    # stores days in a week
    days = [ "Monday", "Tuesday", "Wednesday",
           "Thursday""Friday", "Saturday",
           "Sunday" ]
  
    # Initialize all counts as 4.
    count= [4 for i in range(0,7)]
     
    # find index of the first day
    pos=-1
    for i in range(0,7):
        if (firstday == days[i]):
            pos = i
            break
         
     
  
    # number of days whose occurrence will be 5
    inc = n - 28
  
    # mark the occurrence to be 5 of n-28 days
    for  i in range( pos, pos + inc):
        if (i > 6):
            count[i % 7] = 5
        else:
            count[i] = 5
     
  
    # print the days
    for i in range(0,7):
        print (days[i] , " " , count[i])
     
 
  
# driver program to test
# the above function
n = 31
firstday = "Tuesday"
occurrenceDays(n, firstday)
 
# This code is contributed by Gitanjali.


C#




// C# program to count occurrence of
// days in a month
using System;
 
public class GfG {
 
    // function to find occurrences
    public static void occurrenceDays(int n,
                              string firstday)
    {
         
        // stores days in a week
        String[] days = new String[]{ "Monday",
                        "Tuesday", "Wednesday",
                          "Thursday", "Friday",
                        "Saturday", "Sunday" };
         
        // Initialize all counts as 4.
        int[] count = new int[7];
         
        for (int i = 0; i < 7; i++)
            count[i] = 4;
         
        // find index of the first day
        int pos = 0;
        for (int i = 0; i < 7; i++)
        {
            if (firstday == days[i])
            {
                pos = i;
                break;
            }
        }
         
        // number of days whose occurrence
        // will be 5
        int inc = n - 28;
         
        // mark the occurrence to be 5 of
        // n-28 days
        for (int i = pos; i < pos + inc; i++)
        {
            if (i > 6)
                count[i % 7] = 5;
            else
                count[i] = 5;
        }
         
        // print the days
        for (int i = 0; i < 7; i++)
        {
            Console.WriteLine(days[i] + " "
                                    + count[i]);
        }
    }
     
    // Driver function
    public static void Main()
    {
        int n = 31;
        string firstday = "Tuesday";
         
        occurrenceDays(n, firstday);
    }
}
 
// This code is contributed by vt_m.


Javascript




<script>
 
// JavaScript program to count
// occurrence of days in a month
 
    // function to find occurrences
    function occurrenceDays(n, firstday)
    {
        // stores days in a week
        let days = [ "Monday",
                "Tuesday", "Wednesday",
                "Thursday", "Friday",
                "Saturday", "Sunday" ];
           
        // Initialize all counts as 4.
        let count = [];
        for (let i = 0; i < 7; i++)
            count[i] = 4;
           
        // find index of the first day
        let pos = 0;
        for (let i = 0; i < 7; i++)
        {
            if (firstday == days[i])
            {
                pos = i;
                break;
            }
        }
           
        // number of days whose occurrence
        // will be 5
        let inc = n - 28;
           
        // mark the occurrence to be 5 of n-28 days
        for (let i = pos; i < pos + inc; i++)
        {
            if (i > 6)
                count[i % 7] = 5;
            else
                count[i] = 5;
        }
           
        // print the days
        for (let i = 0; i < 7; i++)
        {
            document.write(days[i] + " " + count[i] + "<br/>");
        }
    }
       
 
// Driver code
         
        let n = 31;
        let firstday = "Tuesday";
        occurrenceDays(n, firstday);
 
</script>


Output

Monday 4
Tuesday 5
Wednesday 5
Thursday 5
Friday 4
Saturday 4
Sunday 4

Time complexity: O(1)
Auxiliary space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads