2182 三角形

题目描述
在三角形范围内(包括边界和定点)给定了三个顶点A ,B ,C;
求满足3|OA|+2|OB|+|OC|最小的点O处;
O,A,B,C均为整点。
输入
输入数据仅一行六个整数,分别代表点A B C 的横纵坐标。
输出
输出两个整数,为点O的坐标,如果有多个满足题意的解,则输出任意一个即可。
样例输入
0 1 0 0 2 0
样例输出
0 1
提示
三角形中的整点共有4个:(0,1),(0,0),(1,0),(2,0) 其中,(0,1)点作为点O可使得3|OA|+2|OB|+|OC|取得最小值。

来源
2020 ICPC 济南站 网络选拔赛

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()//锐角三角形内的点,x坐标取值为三个顶点x坐标最小值与最大值之间
{         //y坐标取值为三个顶点y坐标最小值与最大值之间
    int x[3],y[3],x1,x2,y1,y2,i,j,m,n;
    float min,f;
    for(i=0;i<3;i++)
    {
        scanf("%d%d",&x[i],&y[i]);
    }
    x1=x[0];//作为三个顶点中x最小值
    x2=x[0];//x最大值
    y1=y[0];//y最小值
    y2=y[0];//y最大值
    for(i=1;i<3;i++)
    {
        if(x1>x[i])
        {
            x1=x[i];
        }
        if(x2<x[i])
        {
            x2=x[i];
        }
        if(y1>y[i])
        {
            y1=y[i];
        }
        if(y2<y[i])
        {
            y2=y[i];
        }
    }
    m=x1;//先随意记录一个三角形内的坐标与3|OA|+2|OB|+|OC|的值min
    n=y1;//然后令min与三角形内各坐标带入所取的值比较、交换,并更新点O坐标(m,n)
    min=3*sqrt(pow(y[0]-y1,2)+pow(x[0]-x1,2))+2*sqrt(pow(y[1]-y1,2)+pow(x[1]-x1,2))+sqrt(pow(y[2]-y1,2)+pow(x[2]-x1,2));
    for(i=x1;i<=x2;i++)
    {
        for(j=y1;j<=y2;j++)
        {
            f=3*sqrt(pow(y[0]-j,2)+pow(x[0]-i,2))+2*sqrt(pow(y[1]-j,2)+pow(x[1]-i,2))+sqrt(pow(y[2]-j,2)+pow(x[2]-i,2));
            if(min>f)
            {
                min=f;
                m=i;
                n=j;
            }
        }
    }
    printf("%d %d",m,n);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值