假期刷题打卡--Day21

1、MT1178点与线段的关系

输入线段的2个端点的坐标值x和y,再输入第3个点的坐标,判断点在不在线段上,输出YES或者NO。

格式

输入格式:

按照先起点(x,y)再终点(x,y)的次序。第二行输入第3个点的坐标。坐标整型。第一行两点之间空格,如样例所示。

输出格式:

输出YES或者NO

样例 1

输入:

(-20,20) (-20,-10)
(0,0) 

输出:

NO
相关知识点
判断点是否在某个线段上的方法:

法一:给定一个点,判断其他两个点与该点连线的斜率是否相同。若相同,则证明在;若不在,则证明不在。

法二:假设三个点是x,y,z,直接判断xy+yz是否等于xz即可(本题采用),具体思路可以看看轩哥码题:

【码蹄集新手村全题解09】选择结构 MT1168 – MT1184_哔哩哔哩_bilibili

实现代码
#include 

using namespace std;

int main( )
{
    int x1,y1,x2,y2,x3,y3;
    scanf("(%d,%d) (%d,%d)\n",&x1,&y2,&x2,&y2);
    scanf("(%d,%d)",&x3,&y3);
//下面直接计算两点之间的距离,然后判断是否满足条件
    double l1 = sqrt(pow((x1-x3),2.0) + pow((y1-y3),2.0));
    double l2 = sqrt(pow((x2-x3),2.0) + pow((y2-y3),2.0));
    double l = sqrt(pow((x1-x2),2.0) + pow((y1-y2),2.0));   
    if(l==l1+l2) cout <<  "YES";
    else cout << "NO"; 
    return 0;
}

2、MT1183矩形包含

输入2个矩形的左上角和右下角两个点的坐标值(x,y),判断2个矩形是否相互包含(一个在另一个内部,边框不重叠),输出YES或者NO。矩形的边应与x,y轴相平行。

格式

输入格式:

输入整型,空格分隔。 每行输入一组信息。

输出格式:

输出YES或者NO

样例 1

输入:

-20 20 20 -10 
-10 10 10 -5

输出:

YES
解决思路

        判断其中一个矩形的左上角的x的值是否小于另一个矩形左上角的x的值,左上角y的值是否大于另一个矩形左上角y的值,右下角x的值大于另一个右下角x的值,y值小于另一个右下角的y值,如果是,则输出“YES”,否则输出"NO”,实现代码如下:

实现代码
#include
int main()
{
    int x1, y1, x2, y2, x3, y3, x4, y4;
    scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
    scanf("%d %d %d %d", &x3, &y3, &x4, &y4);
    if ((x1 < x3 && x3 < x2 && y3 < y1 && y3 > y2) && (x1 < x4 && x4 < x2 && y4 < y1 && y4 > y2))
    {
        printf("YES");
    }
    else if ((x3 < x1 && x1 < x4 && y1 < y3 && y1 > y4) && (x3 < x2 && x2 < x4 && y2 < y3 && y2 > y4))
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
    return 0;
}

明天继续吧。

你可能感兴趣的:(假期打卡学习,算法)