一个日历问题的C语言,C++(boost),python,Javascript,Java和Matlab的实现

博客介绍了如何计算1901年至2000年间有多少个星期天落在每月的第一天,分别使用C语言、C++(Boost)、Python、JavaScript、Java和Matlab进行实现。通过给出的闰年规则,展示不同编程语言处理日期和日历问题的方法。
摘要由CSDN通过智能技术生成

今天看到一个很有趣的题目,题目描述如下:

根据下列信息计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上?
a)  1900.1.1是星期一
b)  1月,3月,5月,7月,8月,10月和12月是31天
c)  4月,6月,9月和11月是30天
d)  2月是28天,在闰年是29天
e)  公元年数能被4整除且又不能被100整除是闰年
f)  能直接被400整除也是闰年


以下是C语言实现版本:

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

bool isLeapYear(int year);

// start is the weekday of 1st, January
// return the num of the first day of each month
// is Sunday.
// the start will change into the next year
int getYearNum(int* start, int year);

// Num of days of each month
int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int leapdays[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int main(void)
{
	int sum = 0;
	int start = 1901;
	int end = 2000;
	int startWeek = 1;
	int startYear = 1900;
	int i;

	for (i = 1; i < 13; ++i)
		days[i] += days[i - 1];
	for (i = 1; i < 13; ++i)
		leapdays[i] += leapdays[i - 1];

	for (i = startYear; i < start; ++i)
		getYearNum(&startWeek, i);

	for (i = start; i <= end; ++i)
		sum += getYearNum(&startWeek, i);

	printf("%d\n", sum);

	return 0;
}

bool isLeapYear(int year)
{
	if (year % 4 == 0 && year % 100 != 0)
		return true;
	else if (year % 400 == 0)
		return true;
	return false;
}

int getYearNum(int* start, int year)
{
	int i;
	int count = 0;
	int yeardays;

	if (isLea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值