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++ program for the above approach #include <iostream> using namespace std;
// Function to find the date // after the next half-year 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;
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 Code int main() {
int D = 15;
string M = "January" ;
// Function Call
getDate(D, M);
return 0;
} // This code is contributed by Dharanendra L V. |
// Java program for the above approach class GFG{
// Function to find the date // after the next half-year public 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 Code public static void main(String args[])
{ int D = 15 ;
String M = "January" ;
// Function Call
getDate(D, M);
} } // This code is contributed by SoumikMondal |
# Python program for the above approach # Function to find the date # after the next half-year def 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 Code D = 15
M = "January"
# Function Call getDate(D, M) |
// C# program for the above approach using System;
class GFG{
// Function to find the date // after the next half-year 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
Console.WriteLine(cur_date + " " +
month[cur_month]);
} // Driver Code public static void Main()
{ int D = 15;
string M = "January" ;
// Function Call
getDate(D, M);
} } // This code is contributed by ukasp |
<script> // Javascript program for the above approach // Function to find the date // after the next half-year function 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 Code let D = 15; let M = "January" ;
// Function Call getDate(D, M); // This code is contributed by susmitakundugoaldanga </script> |
16 July
Time Complexity: O(1)
Auxiliary Space: O(1)