十八岁的生日
来源:互联网 发布:nestopia mac 编辑:程序博客网 时间:2024/04/28 00:55
Input
Output
Sample Input
11988-03-07
Sample Output
6574
算法一:
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<queue>
#define LL long long
using namespace std;
const int MAXN =1e5;
const int MAXM= 1e6;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool pan(int i)//bool 布尔型变量,取值只有0或1,即真或假
{
return i%4==0&&i%100!=0||i%400==0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int y,m,d;
scanf("%d-%d-%d",&y,&m,&d);
if(m==2&&d==29)//出生在2月29的人只能18岁的时候还是闰年才可以。
{
if(!pan(y+18))//想想这步应该是没用的,闰年出生18年后肯定不是闰年
puts("-1");
}
else{
int cnt=0; // 之后分三部分
if(pan(y))
mon[2]=29;
else
mon[2]=28; //出生当年
cnt+=mon[m]-d;
for(int i=m+1;i<13;i++)
cnt+=mon[i];
for(int i=y+1;i<y+18;i++) //出生后一年到17岁那年
if(pan(i))
cnt+=366;else
cnt+=365;
if(pan(y+18))
mon[2]=29;else
mon[2]=28;// 18岁那年
for(int i=1;i<m;i++)
cnt+=mon[i];
printf("%d\n",cnt+d);
}
}
return 0;
}
算法二:
#include<cstdio>
bool check(int n)
{
if(n%4==0&&n%100!=0||n%400==0) return true;
return false;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int ans = 0;
char ss, rr;
int y, m, d;
scanf("%d%c%d%c%d",&y,&ss,&m,&rr,&d);
if(check(y) && m==2 && d==29)
{
puts("-1"); continue;
}
for(int i = 0; i < 18; i++)
{
if(check(y+i)) ans += 366;
else ans += 365;
}
if(check(y+18) && m>2) ans++;
if(check(y) && m>2 ) ans--;
printf("%d\n",ans);
}
return 0;
}
- 十八岁的生日
- hdu1201十八岁生日
- C语言:十八岁生日
- 18岁的生日
- hdoj18岁的生日
- 十八岁的我们
- Linux的15岁生日
- 我的25岁生日
- 18岁的生日_HDU
- HDU1201 18岁的生日
- 十八岁女孩的第一次
- 十八岁的靚MM
- 安大的十八岁
- 十八岁心的撕扯
- 22岁生日,糟糕的一天
- 今天是我的23岁生日
- HDU 1201 18岁的生日
- 写给五岁生日的可可宝宝
- Python 字符串
- 杭电acm 2588GCD
- 拦截导弹
- android studio 提示com.android.build.api.transform.TransformException
- java.lang.IllegalStateException: getWriter() has already been called for this response问题解决
- 十八岁的生日
- 进程与线程的一个简单解释
- (4)编写简单的服务器和客户端
- PTA-求链式表的表长
- HashMap源码解析——构造方法
- 二叉树叶子节点的个数和第k层的节点个数——题集八
- 文件操作(二) & 其他总结
- Ural1519 Formula 1 插头dp入门
- Feescale K60开发笔记16: k60 bootloader应用程序的配置