您的位置:首页 > 其它

project euler problem 19 数周末

2013-10-07 15:02 501 查看


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)?

Answer:
171
Completed on Mon, 7 Oct 2013, 07:55
题意:题意很明显,就是日期以内每个月的第一天是星期天的有多少天?

思路:因为题目给出的是1900年的1月1日是星期一,所以1900年的最后一天算出来也是星期二,即对7余1;然后直接算就行了。

#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int cmp(int n)
{
    if(n%4==0&&n%100!=0||n%400==0) return 1;
    return 0;
}
int main()
{
    int sum=0,i,j,b=1;
    for(i=1901; i<=2000; i++)
    {
        if(cmp(i)) a[1]=29;
        else a[1]=28;  //a数组是全局变量,所以要归源
        for(j=0; j<12; j++)
        {
            b=(b+a[j])%7;
            if(b==5) sum++;  //如果每个月加上上个月余下的对7取模余5的话,意思就是这个月的最后一天是星期六,那么下个月的第一天当然就是星期天啦
        }
    }
    cout<<sum<<endl;
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: