首页 > 代码库 > HPU1247 HH的一万天 【坑】

HPU1247 HH的一万天 【坑】

1247: HH的一万天

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 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的一万天 【坑】