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

**Output:**

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.