You are given the following information, but you may prefer to do some research for yourself.
- 1 Jan 1900 was a Monday.
- Thirty days has September,
April, June and November.
All the rest have thirty-one,
Saving February alone,
Which has twenty-eight, rain or shine.
And on leap years, twenty-nine. - A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.
How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
Solution:
This is a pretty easy problem, most people will think of using Inbuilt date libraries, but then they are very slow, I solved this by brute force, I think the code is self explanatory.
public class Prob19 {
public static void main(String[] args)
{
int day = 1 ;
int month = 1;
int year = 1900;
String dayName = "Monday";
int maxDays =0;
int sundayCounter =0;
while( year < 2001)
{
while(month <= 12)
{
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 )
maxDays = 31;
else
if(month == 2)
{
if(leapCounter(year))
{
maxDays = 29;
}
else
maxDays = 28;
}
else
maxDays = 30;
while(day <= maxDays)
{
if(day == 1 && dayName.equalsIgnoreCase("sunday") && year > 1900)
sundayCounter++;
dayName = nextDayReturner(dayName);
day++;
}
day = 1;
month ++;
}
month = 1;
year++;
}
System.out.println(sundayCounter);
}
static String nextDayReturner(String a)
{
a = a.toUpperCase();
if (a.equalsIgnoreCase("SUNDAY"))
return "Monday";
else
if (a.equalsIgnoreCase("MONDAY"))
return "Tuesday";
else
if (a.equalsIgnoreCase("TUESDAY"))
return "wednesday";
else
if (a.equalsIgnoreCase("WEDNESDAY"))
return "thursday";
else
if (a.equalsIgnoreCase("THURSDAY"))
return "friday";
else
if (a.equalsIgnoreCase("FRIDAY"))
return "saturday";
else
if(a.equalsIgnoreCase("SATURDAY"))
return "sunday";
else
return "Error";
}
static boolean leapCounter(int year)
{
if(year%100 == 0)
{
if(year % 400 ==0)
return true;
else
return false;
}else
if(year % 4 == 0)
return true;
else
return false;
}
}
No comments:
Post a Comment