题目1186:打印日期

题目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
来源:
2003-2005年华中科技大学计算机研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问: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",n,num1,num2);//注意这种输出格式,前导可为0
    }
    return 0;
}

 

posted on 2017-03-23 17:20  九月旧约  阅读(240)  评论(0编辑  收藏  举报

导航