• Project Euler Problem 19 Counting Sundays


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


    C++:

    #include <iostream>
    
    using namespace std;
    
    const int DAYS = 7;
    enum DAY {SUN=0, MON, TUE, WED, THU, FRI, SAT};
    int days[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    // 闰年计算函数
    int leapyear(int year) {
        if((year%4 == 0 && year%100 != 0) || year%400 == 0)
            return 1;
        return 0;
    }
    
    int main()
    {
        int sum=0, startday = MON;
    
        for(int i=1900; i<=2000; i++) {
            days[1] = leapyear(i) ? 29 : 28;
            for(int j=0; j<12; j++) {
                startday += days[j];
                startday %= DAYS;
                if(startday == SUN)     // first is SUN day
                    if(i >= 1901)
                        sum++;
            }
        }
        if(startday == SUN)
            sum--;
    
        cout << sum << endl;
    
        return 0;
    }




  • 相关阅读:
    Go 单元测试、基准测试、并发基准测试
    Go url编码和字符转码
    ssh 登录进入 docker container
    Python 开发
    Ethereum 源码分析之 accounts
    Ethereum 源码分析之框架
    数据库视图
    共识算法:PBFT、RAFT
    JQuery Mobile
    Android Studio
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564001.html
Copyright © 2020-2023  润新知