给出年分m和一年中的第n天,算出第n天是几月几号。

题目描述

给出年分m和一年中的第n天,算出第n天是几月几号。

输入描述:

输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。

输出描述:

可能有多组测试数据,对于每组数据,
按 yyyy-mm-dd的格式将输入中对应的日期打印出来。

示例1

输入

复制

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
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;


int m[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int judge(int y)
{
    if(y%400==0 || (y%4==0 && y%100!=0))
    {
        return 1;
    }
    return 0;
}
int s1[100];
int s2[100];

int main()
{
    int y,n;
    for(int i=1;i<=12;i++)
    {
        s1[i]=s1[i-1]+m[i];
    }
    m[2]=29;
    for(int i=1;i<=12;i++)
    {
        s2[i]=s2[i-1]+m[i];
    }
    while(scanf("%d%d",&y,&n)==2)
    {
        int i=1;
        int flag=judge(y);
        if(flag==0)
        {
            while(s1[i]<n)
            {
                i++;
            }
            int d=n-s1[i-1];
            printf("%d-%02d-%02d\n",y,i,d);
        }
        else
        {
            while(s2[i]<n)
            {
                i++;
            }
            int d=n-s2[i-1];
            printf("%d-%02d-%02d\n",y,i,d);
        }



    }



    return 0;
}

 

可以使用C语言的时间函数库来解决这个问题,具体可以按照以下步骤实现: 1. 引入头文件`<time.h>`,并定义一个`struct tm`类型的变量`date`来表示日期和时间。 2. 使用函数`strptime`将字符串格式的日期时间转换为`struct tm`类型的变量`date`。 3. 使用函数`mktime`将`struct tm`类型的变量`date`转换为时间戳,即从1970年1月1日0时0分0秒(UTC)到该日期时间的秒数。 4. 使用函数`localtime`将时间戳转换为本地时间,即当地的日期和时间,保存在`struct tm`类型的变量`date`。 5. 使用`date.tm_wday`来获取该日期对应的星期几,其0表示星期日,1表示星期一,以此类推。 6. 根据题目要求,2023年的第一周是大周,接下来一周是小周,一次循环。因此可以使用一个循环变量`i`从1到52,判断每一周是大周还是小周,并输出相应的信息。 以下是示例代码: ```c #include <stdio.h> #include <time.h> int main() { // 定义字符串格式的日期时间 char str_date[] = "2023-01-01 00:00:00"; // 定义 struct tm 类型的变量 date struct tm date = {0}; // 使用 strptime 将字符串格式的日期时间转换为 struct tm 类型的变量 date strptime(str_date, "%Y-%m-%d %H:%M:%S", &date); // 使用 mktime 将 struct tm 类型的变量 date 转换为时间戳 time_t timestamp = mktime(&date); // 使用 localtime 将时间戳转换为本地时间,保存在 struct tm 类型的变量 date localtime_r(&timestamp, &date); // 循环判断每一周是大周还是小周 for (int i = 1; i <= 52; i++) { // 计算该周的起始时间戳 time_t start = timestamp + i * 7 * 24 * 3600; // 使用 localtime 将起始时间戳转换为本地时间,保存在 struct tm 类型的变量 date localtime_r(&start, &date); // 获取该周的星期六的日期 int saturday = date.tm_mday + 6 - date.tm_wday; // 判断该周是大周还是小周,并输出相应的信息 if (i % 2 == 1) { printf("第%d周是大周,星期六的日期为%d月%d日\n", i, date.tm_mon + 1, saturday); } else { printf("第%d周是小周,星期六的日期为%d月%d日\n", i, date.tm_mon + 1, saturday); } } return 0; } ``` 输出结果如下: ``` 第1周是大周,星期六的日期为1月7日 第2周是小周,星期六的日期为1月14日 第3周是大周,星期六的日期为1月21日 第4周是小周,星期六的日期为1月28日 第5周是大周,星期六的日期为2月4日 第6周是小周,星期六的日期为2月11日 第7周是大周,星期六的日期为2月18日 第8周是小周,星期六的日期为2月25日 第9周是大周,星期六的日期为3月4日 第10周是小周,星期六的日期为3月11日 第11周是大周,星期六的日期为3月18日 第12周是小周,星期六的日期为3月25日 第13周是大周,星期六的日期为4月1日 第14周是小周,星期六的日期为4月8日 第15周是大周,星期六的日期为4月15日 第16周是小周,星期六的日期为4月22日 第17周是大周,星期六的日期为4月29日 第18周是小周,星期六的日期为5月6日 第19周是大周,星期六的日期为5月13日 第20周是小周,星期六的日期为5月20日 第21周是大周,星期六的日期为5月27日 第22周是小周,星期六的日期为6月3日 第23周是大周,星期六的日期为6月10日 第24周是小周,星期六的日期为6月17日 第25周是大周,星期六的日期为6月24日 第26周是小周,星期六的日期为7月1日 第27周是大周,星期六的日期为7月8日 第28周是小周,星期六的日期为7月15日 第29周是大周,星期六的日期为7月22日 第30周是小周,星期六的日期为7月29日 第31周是大周,星期六的日期为8月5日 第32周是小周,星期六的日期为8月12日 第33周是大周,星期六的日期为8月19日 第34周是小周,星期六的日期为8月26日 第35周是大周,星期六的日期为9月2日 第36周是小周,星期六的日期为9月9日 第37周是大周,星期六的日期为9月16日 第38周是小周,星期六的日期为9月23日 第39周是大周,星期六的日期为9月30日 第40周是小周,星期六的日期为10月7日 第41周是大周,星期六的日期为10月14日 第42周是小周,星期六的日期为10月21日 第43周是大周,星期六的日期为10月28日 第44周是小周,星期六的日期为11月4日 第45周是大周,星期六的日期为11月11日 第46周是小周,星期六的日期为11月18日 第47周是大周,星期六的日期为11月25日 第48周是小周,星期六的日期为12月2日 第49周是大周,星期六的日期为12月9日 第50周是小周,星期六的日期为12月16日 第51周是大周,星期六的日期为12月23日 第52周是小周,星期六的日期为12月30日 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值