Find the date after next half year from a given date

Given a positive integer D and a string M representing the day and the month of a leap year, the task is to find the date after the next half year.
Examples:
Input: D = 15, M = “January”
Output: 16 July
Explanation: The date from the 15th of January to the next half year is 16th of July.Input: D = 10, M = “October”
Output: 10 April
Approach: Since a leap year contains 366 days, the given problem can be solved by finding the data after incrementing the current date by 183 days. Follow the steps to solve the problem:
- Store the number of days for each month in that array, say days[].
- Initialize a variable, say curMonth as M, to store the index of the current month.
- Initialize a variable, say curDate as D, to store the current date.
- Initialize a variable, say count as 183, representing the count of days to increment.
- Iterate until the value of count is positive and perform the following steps:
- If the value of count is positive and curDate is at most number of days in the curMonth then decrement the value of count by 1 and increment the value of curDate by 1.
- If the value of count is 0 then break out of the loop.
- Update the value of curMonth by (curMonth + 1)%12.
- After completing the above steps, print the date corresponding to curDate and curMonth as the result.
Below is the implementation of the above approach:
C++
// C++ program for the above approach#include <iostream>using namespace std;// Function to find the date// after the next half-yearvoid getDate(int d, string m) { // Stores the number of days in the // months of a leap year int days[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // List of months string month[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; // Days in half of a year int cnt = 183; // Index of current month int cur_month; for(int i = 0; i < 12; i++) if(m == month[i]) cur_month = i; // Starting day int cur_date = d; while(1) { while(cnt > 0 && cur_date <= days[cur_month]) { // Decrement the value of // cnt by 1 cnt -= 1; // Increment cur_date cur_date += 1; } // If cnt is equal to 0, then // break out of the loop if(cnt == 0) break; // Update cur_month cur_month = (cur_month + 1) % 12; // Update cur_date cur_date = 1; } // Print the resultant date cout << cur_date << " " << month[cur_month] << endl;}// Driver Codeint main() { int D = 15; string M = "January"; // Function Call getDate(D, M); return 0;}// This code is contributed by Dharanendra L V. |
Java
// Java program for the above approachclass GFG{ // Function to find the date// after the next half-yearpublic static void getDate(int d, String m){ // Stores the number of days in the // months of a leap year int[] days = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // List of months String[] month = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; // Days in half of a year int cnt = 183; // Index of current month int cur_month = 0; for(int i = 0; i < 12; i++) if (m == month[i]) cur_month = i; // Starting day int cur_date = d; while (true) { while (cnt > 0 && cur_date <= days[cur_month]) { // Decrement the value of // cnt by 1 cnt -= 1; // Increment cur_date cur_date += 1; } // If cnt is equal to 0, then // break out of the loop if (cnt == 0) break; // Update cur_month cur_month = (cur_month + 1) % 12; // Update cur_date cur_date = 1; } // Print the resultant date System.out.println(cur_date + " " + month[cur_month]);}// Driver Codepublic static void main(String args[]){ int D = 15; String M = "January"; // Function Call getDate(D, M);}}// This code is contributed by SoumikMondal |
Python3
# Python program for the above approach# Function to find the date# after the next half-yeardef getDate(d, m): # Stores the number of days in the # months of a leap year days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # List of months month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] # Days in half of a year cnt = 183 # Index of current month cur_month = month.index(m) # Starting day cur_date = d while(1): while(cnt > 0 and cur_date <= days[cur_month]): # Decrement the value of # cnt by 1 cnt -= 1 # Increment cur_date cur_date += 1 # If cnt is equal to 0, then # break out of the loop if(cnt == 0): break # Update cur_month cur_month = (cur_month + 1) % 12 # Update cur_date cur_date = 1 # Print the resultant date print(cur_date, month[cur_month])# Driver CodeD = 15M = "January"# Function CallgetDate(D, M) |
C#
// C# program for the above approachusing System;class GFG{ // Function to find the date// after the next half-yearstatic void getDate(int d, string m){ // Stores the number of days in the // months of a leap year int[] days = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // List of months string[] month = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; // Days in half of a year int cnt = 183; // Index of current month int cur_month = 0; for(int i = 0; i < 12; i++) if (m == month[i]) cur_month = i; // Starting day int cur_date = d; while (true) { while (cnt > 0 && cur_date <= days[cur_month]) { // Decrement the value of // cnt by 1 cnt -= 1; // Increment cur_date cur_date += 1; } // If cnt is equal to 0, then // break out of the loop if (cnt == 0) break; // Update cur_month cur_month = (cur_month + 1) % 12; // Update cur_date cur_date = 1; } // Print the resultant date Console.WriteLine(cur_date + " " + month[cur_month]);}// Driver Codepublic static void Main(){ int D = 15; string M = "January"; // Function Call getDate(D, M);}}// This code is contributed by ukasp |
Javascript
<script>// Javascript program for the above approach// Function to find the date// after the next half-yearfunction getDate(d, m){ // Stores the number of days in the // months of a leap year let days = [ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; // List of months let month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; // Days in half of a year let cnt = 183; // Index of current month let cur_month = 0; for(let i = 0; i < 12; i++) if (m == month[i]) cur_month = i; // Starting day let cur_date = d; while (true) { while (cnt > 0 && cur_date <= days[cur_month]) { // Decrement the value of // cnt by 1 cnt -= 1; // Increment cur_date cur_date += 1; } // If cnt is equal to 0, then // break out of the loop if (cnt == 0) break; // Update cur_month cur_month = (cur_month + 1) % 12; // Update cur_date cur_date = 1; } // Print the resultant date document.write(cur_date + " " + month[cur_month]);}// Driver Codelet D = 15;let M = "January";// Function CallgetDate(D, M);// This code is contributed by susmitakundugoaldanga</script> |
Output:
16 July
Time Complexity: O(1)
Auxiliary Space: O(1)
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



