日期累加(北理复试上机)

前言:

21考研,不论能否进复试记录一下准备路上写下的垃圾代码。本来啃《算法笔记》,但是感觉太多了做不完,改做王道机试指南。

题目描述:

设计一个程序能计算一个日期加上若干天后是什么日期。

输入

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

输出描述:

输出m行,每行按yyyy-mm-dd的个数输出。

解答:

#include <stdio.h>

const int daytab[2][13] = {
    
    
	{
    
    0,31,28,31,30,31,30,31,31,30,31,30,31},
	{
    
    0,31,29,31,30,31,30,31,31,30,31,30,31}
};
bool isleapyear(int year) {
    
    
	return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
}
int main()
{
    
    
	int m, year, mon, day, date;
	scanf("%d", &m);
	for (int j = 0; j < m; j++) {
    
    
		scanf("%d%d%d%d", &year, &mon, &day, &date);
		date += day;
		for (int i = mon; i < 13; i++)
		{
    
    
			if ((date - daytab[isleapyear(year)][i]) > 0)
				date -= daytab[isleapyear(year)][i];
			else break;
			mon++;
			if (mon == 13) {
    
    
				mon = 1;
				i = 1;
				year++;
			}
		}
		day = date;
		printf("%04d-%02d-%02d\n", year, mon, day);
	}
	return 0;
}

牛客网上的OJ,不能全对,不知道为什么,也不明白这个用例啥意思,日期还往前推了。
在这里插入图片描述
大概是题目出问题了。

猜你喜欢

转载自blog.csdn.net/weixin_44897291/article/details/112668682