首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【杭电oj】1201 - 18岁生日(水)

【杭电oj】1201 - 18岁生日(水)

作者头像
FishWang
发布2025-08-26 17:31:08
发布2025-08-26 17:31:08
1740
举报

18岁生日

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 25688 Accepted Submission(s): 8148

Problem Description

Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。

Input

一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。

Output

T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。

Sample Input

代码语言:javascript
复制
   1
1988-03-07

Sample Output

代码语言:javascript
复制
   6574

Author

Gardon

Source

Gardon-DYGG Contest 2

蓝鸟吐槽:你没事过什么18岁生日啊!(她闰年判断那一步算错,致哀。。。)

这道题我用了最普通的循环18次来计算,麻烦是麻烦了一点,但是准确率还是有的,但是如果不是18年,这种算法就需要改进了。

代码如下:

代码语言:javascript
复制
#include <stdio.h>
int check(int n)		//判断是否为闰年,1为是 
{
	if (n%400==0 || (n%4==0 && n%100!=0))
		return 1;
	return 0;
}
int main()
{
	int u;
	scanf ("%d",&u);
	int y,m,d;
	int ans;
	int t;
	while (u--)
	{
		scanf ("%d-%d-%d",&y,&m,&d);
		if (m==2 && d==29 && check(y+18)==0)
		{
			printf ("-1\n");
			continue;
		}
		ans=0;
		if ((m==2 && d<=28) || m==1)
		{
			for (int i=0;i<18;i++)
			{
				t=y+i;
				ans=ans+365+check(t);
			}
		}
		else
		{
			for (int i=1;i<=18;i++)
			{
				t=y+i;
				ans=ans+365+check(t);
			}
		}
		printf ("%d\n",ans);
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 18岁生日
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档