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

 

题目大意:

  • 1900年1月1日是星期一。
  • 30天的月份有:9月,4月,6月,11月。
  • 此外的月份都是31天,当然2月除外。
  • 2月在闰年有29天,其他时候有28天。
  • 年份可以被4整除的时候是闰年,但是不能被400整除的世纪年(100的整数倍年)除外。

20世纪(1901年1月1日到2000年12月31日)一共有多少个星期日落在了当月的第一天?

#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

 

 

Completed on Mon, 18 Nov 2013, 03:38

 

你可能感兴趣的:(c,欧拉计划)