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;
}