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
// 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> |
Monday 4 Tuesday 5 Wednesday 5 Thursday 5 Friday 4 Saturday 4 Sunday 4
Time complexity: O(1)
Auxiliary space: O(1)
Please Login to comment...