• FZU 2213 Common Tangents 第六届福建省赛


    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2213

    题目大意:两个圆,并且知道两个圆的圆心和半径,求这两个圆共同的切线有多少条,若有无数条,输出-1,其他条如数输出

    解题思路:这道题只需要判断两圆心的距离与半径的距离即可,代码里面有详细解释

    AC代码

    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cmath>
    using namespace std;
    
    int main()
    {
     int t;
     scanf("%d",&t);
     while(t--)
     {
      int ans,x1,y1,r1,x2,y2,r2;
      scanf("%d %d %d %d %d %d",&x1,&y1,&r1,&x2,&y2,&r2);
      if(r1<r2){int temp=r2;r2=r1;r1=temp;;swap(x1,x2);swap(y1,y2);}//第一个为大圆,第二个为小圆
      double d=sqrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));//两圆心之间的距离
      int rd=abs(r1+r2);//两半径之和
      int rc=abs(r1-r2);//两半径之差
      if(d==0&&r1==r2) ans=-1;//如果两上圆同心,并且一样大,就是有无数条切线
      else
       if(rd<d) ans=4;//半径和小于圆心和,即小圆在大圆外
       else
       if(rd==d) ans=3;//大圆与小圆相外切,有一个交点,小圆在大圆外
        else
        {
        if(d+r2==r1) ans=1;//大圆与小圆相交,小圆在大圆内,有一个交点
        else
         if(d+r2>r1) ans=2;//大圆与小圆相交,有两个交点
         else ans=0;//小圆在大圆里面,且无交点
        }
      printf("%d
    ",ans);
     }
     return 0;
    }
  • 相关阅读:
    [ZOJ 3622] Magic Number
    SGU 134.Centroid(图心)
    SGU 223.Little Kings
    C++ IO 详细用法
    POJ2632 Crashing Robots 解题报告
    POJ1068 Parencodings 解题报告
    POJ3295 Tautology 解题报告
    POJ2586 Y2K Accounting Bug 解题报告
    POJ1328 Radar Installation 解题报告
    POJ3728 The merchant解题报告
  • 原文地址:https://www.cnblogs.com/www-cnxcy-com/p/5755648.html
Copyright © 2020-2023  润新知