首页 > 试题广场 >

日期类

[编程题]日期类
  • 热度指数:11818 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
编写一个日期类,要求按xxxx-xx-xx 的格式输出日期,实现加一天的操作

输入描述:
输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。


输出描述:
输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。
示例1

输入

2
1999 10 20
2001 1 31

输出

1999-10-21
2001-02-01

备注:
注意个位数日期前面要有0。
C语言实现nextDay函数,参考《机试指南》泥鳅老师
#include <stdio.h>
#include <stdbool.h>

void nextDay(int year,int month,int day){
    int dayOfMonth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    bool isLeap = (year%400 == 0) || (year%4 ==0 && year%100 != 0);
    if(isLeap)  dayOfMonth[2] = 29;
    day++;
    if(day > dayOfMonth[month]){
        day = 1;
        month++;
    }
    if(month > 12){
        month = 1;
        year++;
    }

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

int main(void){
    int n;
    scanf("%d",&n);

    int year,month,day;
    for(int i = 0; i < n; ++i){
        scanf("%d%d%d",&year,&month,&day);
        nextDay(year,month,day);
    }
    
    return 0;
}


发表于 2024-04-24 22:25:55 回复(0)
#include <stdio.h>
#include <stdbool.h>
int dateTab[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 main() {
    int m;
    scanf("%d", &m);
    int year, month, day;

    while (m--) {
        scanf("%d %d %d", &year, &month, &day);
        if (day + 1 <= dateTab[0][month - 1]) {
            printf("%4d-%02d-%02d\n", year, month, day + 1);
        } else if (month == 12 && day + 1 > dateTab[0][month - 1]) {
            printf("%4d-%02d-%02d\n", year + 1, 1, 1);
        } else if (month != 12 && day + 1 > dateTab[0][month - 1]) {
            printf("%4d-%02d-%02d\n", year, month + 1, 1);
        }
    }

    return 0;
}

发表于 2023-04-12 15:30:41 回复(0)
#include <stdio.h>

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

int main() {
    int year, month,day;
    int number;
    scanf("%d",&number);
    while (number--) { 
        scanf("%d %d %d", &year, &month,&day);
        day += 1;
        if (day>daytab[month]) {
            month += 1;
            day=1;
            if (month>12) {
                year += 1;
                month = 1;
                day = 1;
            }
        }
        
        printf("%04d-%02d-%02d\n",year,month,day);
    }
    return 0;
}

发表于 2023-02-02 13:31:19 回复(0)
  • 不考虑闰年
  • 先将天数加1,如果天数超过当前月的天数,则将日期设置为当年的下一个月的1号。如果当前月份超过13,则将日期设置为下一年的1月1日。
    #include <stdio.h>
     
    int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31};
     
    int main()
    {
        int n;
        int y, m, d;
        scanf("%d", &n);
        while (n--)
        {   
            scanf("%d %d %d", &y, &m, &d);
            d++;
            if (d > months[m])
            {   
                d = 1;
                m++;
                if (m > 12) 
                {   
                    y++;
                    m = 1;
                    d = 1;                                                                                                                                                                        
                }
            }
            printf("%04d-%02d-%02d\n", y, m, d); 
        }   
        return 0;
    }

发表于 2022-03-01 10:26:21 回复(0)
这题只需要考虑正常day+1;月末month+1;年末year+1
#include <stdio.h>
#include <stdlib.h>

int main(){
    int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int num,year,month,day;
    scanf("%d\n",&num);
    for(int i=0;i<num;i++){
        while(scanf("%d%d%d",&year,&month,&day)!=EOF){
            if(month==12&&day==31){
                month=1;
                day=1;
                printf("%04d-%02d-%02d\n",year+1,month,day);
            }
            if(day==days[month]){
                day=1;
                printf("%04d-%02d-%02d\n",year,month+1,day);
            }else{
                printf("%04d-%02d-%02d\n",year,month,day+1);
            }
        }
    }
    return 0;
}


发表于 2022-02-16 10:26:18 回复(0)

问题信息

上传者:小小
难度:
5条回答 5065浏览

热门推荐

通过挑战的用户

查看代码