[Project Euler] Problem 19
2011-10-17 20:45
459 查看
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)?
这道题,一开始读题误解了意思,浪费了不少时间。注意要求解的是21世纪里有多少个星期天发生在一个月的第一天。
开始自己没用库类,活生生的写出了下面的代码:
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
这个比较囧,后来看了有个Datetime module,一句话就可以解决这个问题了:
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
这不得不佩服python的类库实在强大。
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)?
这道题,一开始读题误解了意思,浪费了不少时间。注意要求解的是21世纪里有多少个星期天发生在一个月的第一天。
开始自己没用库类,活生生的写出了下面的代码:
def yearbeginweek(year): """ Function to calculate the week of the first day in a year""" yearrange = range(1900, year) days = 0 for x in yearrange: if x in leapyears: days = days + 366 else: days = days + 365 return 1 + days % 7 week = {1: "Mon", 2: "Tue", 3: "Wen", 4: "Thr", 5: "Fri", 6: "Sat", 7: "Sun"} years = range(1900, 2001) leapyears = [x for x in years if (x % 4 == 0 and x % 100 != 0) or (x % 100 == 0 and x % 400 == 0)] nonleapyears = [x for x in years if not x in leapyears] leapdays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30] nonleapdays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30] suncount = 0 for year in range(1901, 2001): # Calculate the first week day in the year begin = yearbeginweek(year) if begin == 7: suncount += 1 begin = 0 # If it is a leap year if year in leapyears: for days in leapdays: if (begin + days % 7) % 7 == 0: suncount += 1 begin = (begin + days % 7) % 7 else: for days in nonleapdays: if (begin + days % 7) % 7 == 0: suncount += 1 begin = (begin + days % 7) % 7 print suncount
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
这个比较囧,后来看了有个Datetime module,一句话就可以解决这个问题了:
import datetime print len([datetime.date(year, month, 1) for year in range(1901, 2001) for month in range(1, 13) if datetime.date(year, month, 1).weekday() == 6])
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
这不得不佩服python的类库实在强大。
相关文章推荐
- Project Euler:Problem 19 Counting Sundays
- Project Euler – Problem 19
- [Project Euler] Problem 19
- project euler problem 19 数周末
- Project Euler – Problem 10
- [Project Euler] Problem 48
- Project Euler Problem 19 Counting Sundays
- Project Euler:Problem 58 Spiral primes
- Project Euler:Problem 69 Totient maximum
- Project Euler:Problem 87 Prime power triples
- 【Project Euler】【Problem 7】10001st prime
- Project Euler:Problem 61 Cyclical figurate numbers
- [Project Euler]加入欧拉 Problem 2
- [Project Euler]加入欧拉 Problem 14
- [Project Euler]加入欧拉 Problem 16
- [Project Euler]Problem 6
- [Project Euler] Problem 30
- project euler 19
- Project Euler:Problem 21 Amicable numbers
- Project Euler:Problem 59 XOR decryption