NBUT 1007 第几天 C来写,代码思路清晰

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_34678439/article/details/53559260

有一本记录了从1年到9999年的日历,

假设1年1月1日为第一天,现在问第Y年的第M月的第D天是第几天。

Input
有一本记录了从1年到9999年的日历,
假设1年1月1日为第一天,现在问第Y年的第M月的第D天是 第几天。
Output
对于每组数据,输出这是第几天。
Sample Input
2
1 1 1
2 2 2
Sample Output
1
398
原题链接:https://ac.2333.moe/Problem/view.xhtml?id=1007
这个题没有什么难度,但是却要考虑细致,逻辑清晰
先上代码,看清注释!!
#include <stdio.h>
int year, month, day;
//判断闰年,是闰年返回1,不是则返回0
int getrunnian(int y)
{
	if((y%4==0 && y%100!=0)	|| y%400==0)  
		return 1;
	else
		return 0;
}
int main()
{
	int n, sum, i, j;
	int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};  //把每个月份的天数存好,方便后面使用,因m下标从0开始,则第一个数存0
	scanf("%d",&n);
	for(i=0;i<n; i++)
	{
		scanf("%d%d%d",&year, &month, &day);
		sum=0;  //这条语句不可少,这题是多个实例,每个实例结束后sum制零,表示每个实例互不干扰。
		for(j=1; j<year; j++)
		{
			if(getrunnian(j)==0)  //不是闰年为365天,否则为366天
				sum+=365;
			else
				sum+=366;
		}
		for(j=1; j<month; j++)
		{
			if(j==2)
			{
				if(getrunnian(year)==1)  //是闰年二月份为29天,否则为28天
					sum+=29;
				else
					sum+=m[2];
			}
			else
			  sum+=m[j];
		}
		sum+=day;
		printf("%d\n", sum);
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/baidu_34678439/article/details/53559260