日期类问题
标签: 机试攻略 - 高分篇
学习人数: 30.0k


高清播放
赞赏支持

日期类的题目也是常考的题目,这类题目一般都为以下几种考法。

 

1、判断某年是否为闰年
2、某年某月某日是星期几 
变形问法:某日期到某日期之间有多少天
3、某天之后x天是几月几日
4、10:15分之后x分钟是几点几分 
变形问法:某点到某点之间有多少分或多少秒

 

注意输入时候一般用scanf解析输入值
如:2019-11-8 2019-11-08 2019/11/8 10:10

int year, month, day;  
scanf("%d-%d-%d", &year, &month, &day);  
scanf("%d/%d/%d", &year, &month, &day);  
int hour, minute;  
scanf("%d:%d", &hour, &minute);  

 

日期
题目描述:
定义一个结构体变量(包括年、月、日),编程序,要求输入年月日,计算并输出该日在本年中第几天。
输入描述:
输输入三个整数(并且三个整数是合理的,既比如当输入月份的时候应该在1 至12 之间,不应该超过这个范围)否则输出Input error!
输出描述:
输出一个整数.既输入的日期是本月的第几天。
输入样例#:
1985 1 20
2006 3 12
输出样例#:
20
71
题目来源:
DreamJudge 1051

解题分析:这个题目的考点在于两个地方,一个是每个月的天数都不一样,另一个是2月如果是闰年则多一天,最后我们还要判断输入的日期是否存在,如果不存在则输出Input error!

 

参考代码

#include <stdio.h>  
  
struct node {  
    int year, month, day;  
}p;  
int f[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  
int main() {  
    while (scanf("%d%d%d", &p.year, &p.month, &p.day) != EOF) {  
        //判断是否闰年  
        if ((p.year%400== 0)||(p.year%4==0)&&(p.year%100!=0)) {  
            f[2] = 29;  
        }  
        else f[2] = 28;  
        int flag = 0;  
        //判断月份输入是否合法  
        if (p.month < 1 || p.month > 12) flag = 1;  
        //判断天的输入是否合法  
        if (p.day < 0 || p.day > f[p.month]) flag = 1;  
        if (flag) {  
            printf("Input error!\n");  
            continue;  ...
登录查看完整内容


课后作业

练习题目

DreamJudge 1011 日期
DreamJudge 1290 日期差值
DreamJudge 1410 打印日期
DreamJudge 1437 日期类
DreamJudge 1446 日期累加
DreamJudge 1053 偷菜时间表


登录后开始许愿

2 条上岸许愿
Lepain
2026年3月16日 12:33

//要求输入年月日,计算并输出该日在本年中第几天
#include<bits/stdc++.h>
using namespace std;
int main(){
    int x,y,z;
    cout<<"输入年月日:";
    cin>>x>>y>>z;
    if(y==1||y==3||y==5||y==7||y==8||y==10||y==12){
        if(z<=0||z>31) cout<<"日期错误"<<endl;
    }
    else if(y==4||y==6||y==9||y==11){
        if(z<=0||z>30) cout<<"日期错误"<<endl;
    }
    else if(y==2){
        if(x%4==0){
            if(z<=0||z>29) cout<<"日期错误"<<endl;
        }
        else{
            if(z<=0||z>28) cout<<"日期错误"<<endl;
        }
    }
    else cout<<"日期错误"<<endl;
    int runnian[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    int pingnian[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int day=0;
    if(x%4==0){
        for(int i=0;i<y;i++){
            day+=runnian[i];
        }
    }
    else{
        for(int i=0;i<y;i++){
            day+=pingnian[i];
        }
    }
    day+=z;
    cout<<day<<endl;
    return 0;

赞(0)
hao973
2025年3月5日 18:06

   
   
   

 

赞(0)