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, 11:38
Comments