Project Euler problem 19

This commit is contained in:
2014-11-15 23:38:58 +04:00
parent c0e29f843b
commit 103e3a2298

View File

@@ -1,30 +1,37 @@
/* Check cf5-opt.vim defs.
VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
VIM: let g:wcppflags="/O2 /EHsc /DWIN32"
VIM: let g:argv=""
VIM-: let g:cf5output=0
*/
#include <iostream>
#include <exception>
#Counting Sundays
#Problem 19
#
#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)?
#
/*
*/
int main ( void )
{try{
return 0;
}
catch ( const std::exception& e )
{
std::cerr << std::endl
<< "std::exception(\"" << e.what() << "\")." << std::endl;
return 2;
}
catch ( ... )
{
std::cerr << std::endl
<< "unknown exception." << std::endl;
return 1;
}}
# let's encode sunday 0 - mon 1 ...
# 1 Jan 1901
a = 365 #1900 is not a leap year
a += 1 #1 jan is monday
a %= 7 #the day of 1 jan 1901
c = 0 #count of months for which sundays fell on march.
m = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
for i in range( 1901, 2001 ):
for j in range( 1, 13 ):
if a==0:
c += 1
a += m[j-1]
if j==2 and i%4==0:
a += 1
a %= 7
print(c)