Nepire的校OJ入门题解—蓝桥选拔篇(二)

欢迎来到Nepire的校OJ入门题解——————蓝桥选拔篇(二)

这次我主要是讲解第八届蓝桥杯全国软件和信息技术专业人才大赛校内选拔赛的七道题目,中间可能会扯到一些其他东西,然后就开始我们的入门题解吧呜喵

Problem B:几何题(一)

Description

在平面直角坐标系中,矩形的四个点的坐标按顺时针或逆时针依次为P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4),问P0(x0,y0)是否在矩形内(数据保证不在矩形边上)。
在平面直角坐标系中,矩形的四个点的坐标按逆时针依次为P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4),问P0(x0,y0)是否在矩形内(数据保证不在矩形边上)。

Input

输入数据的第一行有一个整数T,表示有T组测试数据。
每组数据有一行,包含十个实数x1,y1,x2,y2,x3,y3,x4,y4,x0,y0
(-1000.0 < x1,y1,x2,y2,x3,y3,x4,y4,x0,y0 < 1000.0)

Output

输出T表示点P0在矩形内,F表示不在矩形内
每组测试数据输出一行。

Sample Input

2
1.00 0.00 1.00 1.00 0.00 1.00 0.00 0.00 0.50 0.50
1.00 0.00 1.00 1.00 0.00 1.00 0.00 0.00 1.50 0.50

Sample Output

T
F

解题思路

这是一道简单的数学题,有许多种解法,在这里我是以向量的方式来验证点在一个矩形内部

参考代码

#include <ctype.h>
#include <errno.h>
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>
#include <wctype.h>
#include <assert.h>
#include <limits.h>
#include <locale.h>
#include <math.h>     
int main()
{
    int i,n,pan;
    double m,k,x1,y1,x2,y2,x3,y3,x4,y4,x0,y0,x,y,xlp1,xlp2,xlp3,xlp4;
    scanf("%d",&n);
    while(n--)
    {
        pan=0;
        scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4,&x0,&y0);

        xlp1=(x2-x1)*(x0-x1)+(y2-y1)*(y0-y1);//向量的点乘
        xlp2=(x4-x3)*(x0-x3)+(y4-y3)*(y0-y3);
        xlp3=(x3-x2)*(x0-x2)+(y3-y2)*(y0-y2);
        xlp4=(x1-x4)*(x0-x4)+(y1-y4)*(y0-y4);

        if(xlp1*xlp2 >= 0 && xlp3*xlp4 >= 0)
        {
            pan=1;
        }

        if(pan==1)
        {
            printf("T\n");
        }
        else
        {
            printf("F\n");
        }
    }

    return 0;
}

下次蓝桥校选拔Problem C,欢迎大家在下面评论建议

——Nepire

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页