2020牛客寒假算法基础集训营6 J 签到题

链接:https://ac.nowcoder.com/acm/contest/3007/J
题目描述

现有一个边长为正整数的三角形,问能否以其三个顶点为圆心画三个圆,使三个圆两两外切

三边长均不超过10^{8}

 思路

首先判断是否是三角形,两边之差小于第三边或者之和大于第三边都行,然后假设可以相切,三个边长分别为r1,r2,r3,那么就有r1+r2=a,r1+r3=b,r2+r3=c,可以求出来三个半径,如果三个半径有小于等于0的,就不可行,否则可行

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    if (abs(a - b) >= c || abs(a - c) >= b || abs(b - c) >= a){
        printf("wtnl\n");
        return 0;
    }
    double x, y, z;
    x = a;
    y = b;
    z = c;
    double r1, r2, r3;
    r1 = x + y - z;
    r2 = x + z - y;
    r3 = y + z - x;
    r1 /= 2;
    r2 /= 2;
    r3 /= 2;
    if (r1 > 0 && r2 > 0 && r3 > 0){
        if (r1 > r2)swap(r1, r2);
        if (r1 > r3)swap(r1, r3);
        if (r2 > r3)swap(r2, r3);
        printf("Yes\n%.2lf %.2lf %.2lf\n", r1, r2, r3);
    }
    else printf("No\n");
    return 0;
}
发布了204 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43701790/article/details/104332186