您的位置:首页 > 其它

【学习笔记】〖九度OJ〗题目1186:打印日期

2014-03-05 17:41 281 查看
题目1186:打印日期

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:2549

解决:918

题目描述:

给出年分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


来源:2003-2005年华中科技大学计算机研究生机试真题

答疑:解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7909-1-1.html

//本题利用Hash思想,将对应平闰年各月分天数存储,免去条件判断
#include<iostream>
#include<cstring>

#include<stdio.h>
using namespace std;

int dofm[2][12] = {31, 28 ,31,30,31,30,31,31,30,31,30,31,
31, 29 ,31,30,31,30,31,31,30,31,30,31};

int isR(int year)
{
int res = 0;
if (year%400 == 0)
{
return 1;
}
if (year%4 == 0)
{
if (year%100 == 0)
{
return 0;
}
res = 1;
}
return res;
}

int main()
{

int year, day, i,j;
while (cin >> year >> day)
{
j = isR(year);
for (i=0; i<12; i++)
{
if (day > dofm[j][i])
{
day -= dofm[j][i];
}
else
break;

}

printf("%04d-%02d-%02d\n", year, i+1, day);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: