18岁生日
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 32851 Accepted Submission(s): 10649问题描述:参见上文。
问题分析:单纯的一个有关闰年及日期天数计算问题。
程序说明:C语言库函数scanf()对于格式化输入有天然优势。
AC的C++语言程序如下:
/* HDU1201 18岁生日 */#include <iostream>
#include <cstdio>using namespace std;const int N = 18;
const int YEARDAYS = 365;// 闰年计算函数
int leapyear(int year) {if((year%4 == 0 && year%100 != 0) || year%400 == 0)return 1;return 0;
}int main()
{int t, byear, bmonth, bday, sum;scanf("%d", &t);while(t--) {scanf("%d-%d-%d", &byear, &bmonth, &bday);if(bmonth == 2 && bday == 29 && leapyear(byear + N) != 1)printf("-1\n");else {// 计算天数sum = 0;sum = YEARDAYS * N; // 每年365天,18年总天数for(int i=1; i<N; i++) // 出生年和18岁那年以外的闰年天数sum += leapyear(byear + i);if(bmonth > 2)sum += leapyear(byear + N); // 18岁那年的闰年天数else if(bmonth < 2 || bday != 29)sum += leapyear(byear); // 出生年的闰年天数printf("%d\n", sum);}}return 0;
}