题目1186:打印日期
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:10237
解决:3498
- 题目描述:
-
给出年分m和一年中的第n天,算出第n天是几月几号。
- 输入:
-
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
- 输出:
-
可能有多组测试数据,对于每组数据,
按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
- 样例输入:
-
2000 3 2000 31 2000 40 2000 60 2000 61 2001 60
- 样例输出:
-
2000-01-03 2000-01-31 2000-02-09 2000-02-29 2000-03-01 2001-03-01
- 答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7909-1-1.html
- 就是先判断一下是否是润年,用一个数组保存每个月的天数,闰年二月为29天,平年二月为28天
-
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #define maxn 105 using namespace std; int main() { int n,m; while(~scanf("%d%d",&n,&m)) { int flag=0; int a[12]; if((n%4==0&&n%100!=0)||n%400==0)//闰年的判断 flag = 1; if(flag) { a[0]=31,a[1]=29,a[2]=31,a[3]=30,a[4]=31,a[5]=30,a[6]=31,a[7]=31, a[8]=30,a[9]=31,a[10]=30,a[11]=31; } else { a[0]=31,a[1]=28,a[2]=31,a[3]=30,a[4]=31,a[5]=30,a[6]=31,a[7]=31, a[8]=30,a[9]=31,a[10]=30,a[11]=31; } int num1,num2,sum=0; for(int i=0;i<12;i++) { sum = sum + a[i]; if(m<=sum) { num1 = i+1; if(m==sum) num2 = a[i]; else num2 = m - (sum - a[i]); break; } } printf("%04d-%02d-%02d ",n,num1,num2);//注意这种输出格式,前导可为0 } return 0; }