A - Triangle(三角形+暴力)

题目链接:

http://codeforces.com/problemset/problem/18/A

分析:

这个题操作难度还是比较小的。 不过我们要熟知三角形的有关公式。
第一: 直角三角形的有关判断。 勾股定理 。
第二:三角形的面积怎么求
1,知三角坐标求面积:
如A(X1,Y1) B(X2,Y2) C(X3,Y3)
则S=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2)
2,知三边长求面积:
在这里插入图片描述
本题用到了第一点。
对于三角形公式的参考博客:
https://blog.csdn.net/qq_41199327/article/details/79943947

#include"stdio.h"
#include"string.h"
#include"math.h"
#include"algorithm"
using namespace std;
int pow(int x)
{
    return x*x;
}
int check(int dirx[],int diry[])//判断能否构成三角形
{
    double s=(dirx[0]*diry[1]+dirx[1]*diry[2]+dirx[2]*diry[0]-dirx[0]*diry[2]-dirx[1]*diry[0]-dirx[2]*diry[1])/2.0;
    if(s==0)
        return 0;
    int dis1=(pow(dirx[0]-dirx[1])+pow(diry[0]-diry[1]));
    int dis2=(pow(dirx[0]-dirx[2])+pow(diry[0]-diry[2]));
    int dis3=(pow(dirx[1]-dirx[2])+pow(diry[1]-diry[2]));
    if((dis1)+(dis2)==(dis3)||(dis2)+(dis3)==(dis1)||(dis1)+(dis3)==(dis2))
        {
            return 1;
        }
    return 0;
}
int change(int dirx[],int diry[])//判断改变一个位置,能否构成三角形
{
    int dir[2]={1,-1};
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<2;j++)
        {
            int x=dirx[i];
            dirx[i]+=dir[j];
            if(check(dirx,diry))
                {
                  //  printf("x %d %d\n",i,j);
                    return 1;
                }
            dirx[i]=x;
        }
    }
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<2;j++)
        {
            int y=diry[i];
            diry[i]+=dir[j];
            if(check(dirx,diry))
                {
                   // printf("y %d %d \n",i,j);
                    return 1;
                }
            diry[i]=y;
        }
    }
    return 0;
}
int main()
{
    int dirx[3];
    int diry[3];
    for(int i=0;i<3;i++)
        scanf("%d%d",&dirx[i],&diry[i]);
    if(check(dirx,diry))
    {
        printf("RIGHT\n");
    }
    else
        if(change(dirx,diry)==0)
           printf("NEITHER\n");
        else
            printf("ALMOST\n");
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值