1 solutions

  • 0
    @ 2021-10-25 19:57:21

    这个题目要我们找到经过两个圆的最小距离之和,首先得理解清楚题意,只要经过了那个圆的范 围,那么就算通过了这个圆,根据题目给出的样例,大家自己画个图(因为我懒所以就不画了),路线应该是这样的,首先通过圆心在第一象限的圆的正下方(正对圆心的下方的那个圆的边界点),然后我们需要求此时到另一个圆的最小距离,那么就是把我们找到的第一个点和第二个圆心相连,然后只需要减去一个R就能得到样例给出的数据,可是实际上并不这么简单,因为如果当第一个圆与x轴相交时,算法就不一样的,路径应该是直接从原点开始沿x轴直接到达圆心位于x轴上圆的最左边的点,那么计算的方法应该就是s=2aRs=2*a-R

    下面直接上代码:

    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            double a,b,r;
            scanf("%lf%lf%lf",&a,&b,&r);
            double s3;
            if(b-r>0)
            {
                double s1=sqrt(a*a+(b-r)*(b-r));
                s3=2*s1-r;//这是第一种情况时的计算方法
            }
            else
                s3=2*a-r;
            printf("%.2lf\n",s3);
        }
        return 0;
    }
    
    

    Information

    ID
    132
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    9
    Tags
    # Submissions
    137
    Accepted
    12
    Uploaded By