首页 > 代码库 > HPU1247 HH的一万天 【坑】
HPU1247 HH的一万天 【坑】
1247: HH的一万天
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 115 Solved: 42
[Submit][Status][Web Board] [Edit]
Description
HH的生日是YY年MM月DD日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天)。
Input
输入有多行
第一行先输入一个数字N
接下来第2行到第N+1行,每行输入一个时间,格式为YY MM DD 其中1949<=YY<=2006,日期绝对合法。
Output
输出有多行。即HH生日第一万天以后的日期,格式为 “Y-M-D”。
每组测试数据占一行输出!
Sample Input
1 1979 4 16
Sample Output
2006-9-1
HINT
测试代码的正误,是根据后台多组测试数据来判断的,并非题目给出的测试数据没问题就能AC
Source
河南理工大学第五届ACM程序设计大赛
必须要很细心很细心才行。。由于今天点背,WA了两次。
#include <stdio.h> #include <string.h> bool f(int y) { return y % 4 == 0 && y % 100 != 0 || y % 400 == 0; } int cal(int y, int m, int d) { --m; switch(m) { case 11: d += 30; case 10: d += 31; case 9: d += 30; case 8: d += 31; case 7: d += 31; case 6: d += 30; case 5: d += 31; case 4: d += 30; case 3: d += 31; case 2: d += 28; if(f(y)) ++d; case 1: d += 31; } return d; } int main() { int y, m, d, T, sum, tmp, i; scanf("%d", &T); while (T--) { scanf("%d%d%d", &y, &m, &d); tmp = 10000; tmp -= 365 - cal(y, m, d); if (f(y)) --tmp; while (tmp > 365) { ++y; tmp -= 365; if (f(y)) --tmp; } ++y; for (i = 1; i <= 12 && tmp > 31; ++i) { if (i == 1 || i == 3 ||i == 5 ||i == 7 ||i == 8 ||i == 10 ||i == 12) tmp -= 31; else if (i == 2) { tmp -= 28; if(f(y)) --tmp; } else tmp -= 30; } if (i == 2 && tmp > 28) { if(f(y) && tmp > 29) i = 3, tmp -= 29; else if(!f(y) && tmp > 28) i = 3, tmp -= 28; } else if (tmp == 31) { if (!(i == 1 || i == 3 ||i == 5 ||i == 7 ||i == 8 ||i == 10 || i == 12)) ++i, tmp = 1; } printf("%d-%d-%d\n", y, i, tmp); } return 0; } /************************************************************** Problem: 1247 User: changmu Language: C++ Result: Accepted Time:0 ms Memory:816 kb ****************************************************************/
HPU1247 HH的一万天 【坑】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。