码迷,mamicode.com
首页 > 其他好文 > 详细

hpu第五届acm比赛

时间:2015-11-20 20:00:16      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

vijos
P1211生日日数
 

描述

CCC老师的生日是YY年MM月DD日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天)。

格式

输入格式

从文件的第一行分别读入YY,MM,DD其中1949<=YY<=2006,日期绝对合法。

输出格式

输出文件只有一行,即CCC老师生日第一万天以后的日期,格式为 “Y-M-D”。

样例1

样例输入1[复制]

 
1979 4 16

样例输出1[复制]

 
2006-9-1
题解:坑点在,2月29,1月1,12月31,
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define mem(x,y) memset(x,y,sizeof(x))
#define yea(x) (x%400==0||(x%4==0&&x%100!=0))
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int getd(int nn,int yy,int rr){
	int d=0;
	if(yea(nn))m[2]=29;
	for(int i=1;i<yy;i++)d+=m[i];
	d+=rr;
	m[2]=28;
//	printf("%d\n",d); 
	return d;
}
int main(){
	int N,nn,yy,rr;
	while(~scanf("%d%d%d",&nn,&yy,&rr)){
		int d=10000;
		m[2]=28;
		if(yea(nn))d-=(366-getd(nn,yy,rr));
		else d-=(365-getd(nn,yy,rr));
		int y,mon,r;
		for(y=nn+1;d>=365;y++){
			if(yea(y))d-=366;
			else d-=365;
		}
		if(yea(y))m[2]=29;
		if(d==0){
			y--;
			mon=12;r=31;
		}
		else for(mon=1;mon<13;mon++){
			if(d>m[mon])d-=m[mon];
			else if(d==m[mon]){
				r=m[mon];
				break;
			}
			else{
				r=d;
				break;
			}
		}
		printf("%d-%d-%d\n",y,mon,r);
	}
	return 0;
}

  

hpu第五届acm比赛

标签:

原文地址:http://www.cnblogs.com/handsomecui/p/4981772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!