(Problem 19)Counting Sundays

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

 

#include <stdio.h> 
#include <stdbool.h>

const int a[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},
                     {31,29,31,30,31,30,31,31,30,31,30,31}};


bool leapYear(int n)  //判断闰年
{
    return (((n % 4 ==0) && (n % 100 !=0)) || (n % 400 == 0));
}

bool issunday(int n) //判断某天是否是星期天
{
    return (n % 7 == 0 ? true : false);
}

void solve(void)
{
    int num, i, j, count;
    count = 0;

    i = 1901;
    num = 1;
    while(i < 2000) {

        int t = (leapYear(i) ? 1 : 0);   //判断闰年
        for(j = 0; j < 12; j++) {
            num += a[t][j];
            if(issunday(num)) count++;
        }
        i++;
    }
    printf("%d\n",count);
}

int main(void)
{
    solve();
    return 0;
}
Answer:
171
posted @ 2014-01-10 17:13  acutus  阅读(297)  评论(0编辑  收藏  举报
TOP