清华大学考研复试机试:今年的第几天

版权声明:本文为博主原创,未经博主允许不得转载。转载请附上原文链接。 https://blog.csdn.net/qq_38341682/article/details/88584680

题目描述

输入年、月、日,计算该天是本年的第几天。

输入描述

包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。

输出描述

输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。

分析

水题,注意闰年和每个月的天数即可,可以使用一个全局数组来记录每个月的天数,如果是闰年再特殊处理。关于年份和日期的题目不是很难,不过实际写起来可能会有一点麻烦,因为每个月的天数不同,并且还要考虑闰年的情况。如果是在一年内还好,如果跨年份还会更加复杂。另外,在具体实现时还需要注意,如果是在二月份的某一天,即使是闰年,也不要多加一天,因为还没有跨过二月,在编程时要注意这种情况。

AC代码如下:

#include<iostream>

using namespace std;
//全局数组记录每月的天数,这是平年的情况,闰年单独处理
int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool isr(int y)//判断是否是闰年
{
	if((y%4 == 0 && y%100 != 0) || y%400 == 0)
	{
		return true;
	}
	return false;
}

int main(void)
{
	int y, m, d;
	while(cin >> y >> m >> d)
	{
		int result = 0;
		if(isr(y) && m > 2)//是闰年,且已经跨过二月
		{
			result = 1;
		}
		for(int i = 0; i < m-1; ++i)//计算整月的天数
		{
			result += day[i];
		}
		result += d;//计算最后一个月经过的天数
		cout << result;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38341682/article/details/88584680