Find the number of times every day occurs in a month

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 fucntion
int main()
{
    int n = 31;
    string firstday = "Tuesday";
    occurrenceDays(n, firstday);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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 fucntion
n = 31
firstday = "Tuesday"
occurrenceDays(n, firstday)
  
# This code is contributed by Gitanjali.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right



Output:

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


My Personal Notes arrow_drop_up

Striver(underscore)79 at Codechef and codeforces D

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.