有这样的日期吗(日期的处理)

题目来源:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1706

1706: 有这样的日期吗?

时间限制: 1 Sec 内存限制: 64 MB

题目描述

有个人的历史没有学好而且喜欢糊弄人。当问到某个重大历史事件是何年何月何日时发生时,他会立刻毫不犹豫地信口就报出一个日期,人家以为他还真有学问,这么对答如流。其实,他说出的日期可能不合历法,压根就不存在的这样的日期。请编程判断某个给定的日期是否合乎历法。

输入

第一行有个整数n表示测试用例的个数(1≤n≤100)。其后的n行,每行有三个正整数y,m,d,表示一个日期的年月日。

输出

如果该日期是合乎历法的则输出yes,否则输出no;每个日期的输出单独占一行。

样例输入

5
2009 2 29
2000 2 29
1977 9 31
200 12 30
1800 12 32

样例输出

no
yes
no
yes
no

解析:主要在于闰年,大小月,二月的处理

代码:

#include<iostream> 
using namespace std; 
bool check(int year) 
{ 
    if (year % 100==0) 
    { 
        if (year % 400 == 0) 
            return 1; 
        else
            return 0; 
    } 
    else
    { 
        if (year % 4 == 0) 
            return 1; 
        else
            return 0; 
    } 
} 
int main() 
{ 
    int t; 
    cin >> t; 
    while (t--) 
    { 
        int y, m, d; 
        cin >> y >> m >> d; 
        if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) 
        { 
            if (d < 1 || d>31) 
                cout << "no" << endl; 
            else
                cout << "yes" << endl; 
        } 
        else if (m == 4 || m == 6 || m == 9 || m == 11) 
        { 
            if (d < 1 || d>30) 
                cout << "no" << endl; 
            else
                cout << "yes" << endl; 
        } 
        else
        { 
            if (check(y) == true) 
            { 
                if (d < 1 || d>29) 
                    cout << "no" << endl; 
                else
                    cout << "yes" << endl; 
            } 
            else
            { 
                if (d < 1 || d>28) 
                    cout << "no" << endl; 
                else
                    cout << "yes" << endl; 
            } 
        } 
    } 
} 
/************************************************************** 
    Problem: 1706 
    User: 201730685257 
    Language: C++ 
    Result: 正确 
    Time:0 ms 
    Memory:1484 kb 
****************************************************************/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值