[2021.11.14]UPC-计算机2021随堂测验第四场-21235 Problem H 自动找人系统

该博客介绍了如何在C++中实现一个判断时间是否在给定时间段内的程序。代码涉及日期的比较和排序,通过判断年、月、日来确定时间点的先后。博主分享了可能较为冗余的代码实现,并表达了对于简洁解决方案的期待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

maoge现在转到了警局工作,现在他被要求开发一个找人系统。给定三个参数a,b,c,表示年,月,日,表示一个时间节点。他要找出在两个时间节点之间的时间(两个时间节点本身也包括在内)。现在给定两个时间节点和1个时间发生的时间,他要判断这个时间是否在这个时间段之中。

maoge又双叒叕找到了你来帮忙。

输入

输入三行,三个时间,每行有三个数,表示年月日。前两行表示两个时间节点(不一定按照第一个小于第二个的顺序给出),最后一行是这个时间发生的时间。保证合法

输出

输出一个“Yes”或者“No”表示是否在这个时间段之中。

样例输入 Copy

2007 1 1
2007 12 31
2007 3 22

样例输出 Copy

Yes

题解

       其实并没有太困难的地方,就是各种判断写得太绕了,可能是我的方法太过于拙劣。也有同学通过转换为天数的方式来进行判断,分享一下我的做法,抛砖引玉~

        如此简单的目的..---判断事件是否发生在指定时间段,居然需要这么复杂的判断结构..是我的代码写的太过于臃肿杂乱了吗?... sad : (

代码如下 : )

如有纰漏,请多多指正!!

#include <cstdio>
struct t{
    int y,m,d;
};
int main() {
    bool flag;
    t a,b,s,e,h;
    scanf("%d %d %d",&a.y,&a.m,&a.d);
    scanf("%d %d %d",&b.y,&b.m,&b.d);
    scanf("%d %d %d",&h.y,&h.m,&h.d);
    if(a.y<b.y){    //s为起始时间,e为终止时间,一下判断用来判断a,b两者谁为起始与终止。
        s=a;
        e=b;
    }
    else if(a.y>b.y) {
        s = b;
        e = a;
    }
    else{
        if(a.m<b.m){
            s=a;
            e=b;
        }
        else if(a.m>b.m){
            s=b;
            e=a;
        }
        else{
            if(a.m<b.m){
                s=a;
                e=b;
            }
            else{
                s=b;
                e=a;
            }
        }
    }
    if(h.y>=s.y&&h.y<=e.y){
        if(s.y==e.y){
            if(s.m==e.m){
                if(h.d>=s.d&&h.d<=e.d){
                    flag=true;
                }
                else flag=false;
            }
            else{
                if(h.m>=s.m&&h.m<=e.m){
                    if(h.m==s.m){
                        if(h.d>=s.d)
                            flag=true;
                        else
                            flag=false;
                    }
                    else if(h.m>s.m&&h.m<s.m)
                        flag=true;
                    else if(h.m==e.m){
                        if(h.d<=e.d)
                            flag=true;
                        else
                            flag=false;
                    }
                }
                else flag = false;
            }
        }
        else if(h.y==s.y){
            if(h.m==s.m){
                if(h.d>=s.d){
                    flag=true;
                }
                else flag=false;
            }
            else if(h.m>s.m){
                flag = true;
            }
            else flag = false;
        }
        else if(h.y>s.y&&h.y<e.y)
            flag = true;
        else if (h.y==e.y){
            if(s.m==e.m){
                if(s.d<=e.d)
                    flag=true;
                else
                    flag=false;
            }
            else if(s.m<e.m)
                flag=true;
            else flag=false;
        }
    }
    else flag=false;
    if(flag)
        printf("Yes");
    else
        printf("No");
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值