Problem:
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:
171
Code:
The solution may include methods that will be found here: Library.java .
public interface EulerSolution{ public String run(); }
/* * Solution to Project Euler problem 19 * By Nayuki Minase * * http://nayuki.eigenstate.org/page/project-euler-solutions * https://github.com/nayuki/Project-Euler-solutions */ public final class p019 implements EulerSolution { public static void main(String[] args) { System.out.println(new p019().run()); } public String run() { int count = 0; for (int y = 1901; y <= 2000; y++) { for (int m = 1; m <= 12; m++) { if (dayOfWeek(y, m, 1) == 0) // Sunday count++; } } return Integer.toString(count); } private static int dayOfWeek(int year, int month, int day) { long m = mod((long)month - 3, 4800); long y = mod(year + m / 12, 400); m %= 12; return (int)((y + y/4 - y/100 + (13 * m + 2) / 5 + day + 2) % 7); } private static long mod(long x, long y) { x %= y; if (y > 0 && x < 0 || y < 0 && x > 0) x += y; return x; } }
No comments :
Post a Comment