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

Recommended Posts:



    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.