FZU 2213 Common Tangents 第六届福建省赛
2016-08-10 10:15
169 查看
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2213
题目大意:两个圆,并且知道两个圆的圆心和半径,求这两个圆共同的切线有多少条,若有无数条,输出-1,其他条如数输出
解题思路:这道题只需要判断两圆心的距离与半径的距离即可,代码里面有详细解释
AC代码
题目大意:两个圆,并且知道两个圆的圆心和半径,求这两个圆共同的切线有多少条,若有无数条,输出-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\n",ans); } return 0; }
相关文章推荐
- FZU Problem 2213 Common Tangents(简单几何,分类讨论)——第六届福建省大学生程序设计竞赛-重现赛
- FOJ 2213 Common Tangents 【第六届福建省大学生程序设计竞赛】
- 2015福建省赛 Common Tangents 2213 (简单数学几何)
- FZU 2213——Common Tangents——————【两个圆的切线个数】
- 第六届福建省大学生程序设计竞赛 Problem B Common Tangents【几何】
- Common Tangents【第六届福建省大学生程序设计竞赛-重现赛】
- Common Tangents FZU - 2213
- 第六届福建省大学生程序设计竞赛 Common Tangents
- 第六届福建省大学生程序设计竞赛-重现赛,Problem B Common Tangents【数学几何】
- Knapsack problem (FZU_2214,福建省第六届ACM-problemC) 01背包+初始化问题+渐缩问题
- Knapsack problem (FZU_2214,福建省第六届ACM-problemC) 01背包+初始化问题+渐缩问题
- 第六届福建省大学生程序设计竞赛(FZU2212—FZU2221)
- FZU Problem 2216 The Longest Straight(二分答案+树状数组)——第六届福建省大学生程序设计竞赛-重现赛
- FZU 2212 Super Mobile Charger 第六届福建省赛
- 福建省赛-- Common Tangents(数学几何)
- FZU Problem 2221 RunningMan(思维考查)——第六届福建省大学生程序设计竞赛-重现赛
- 福建省赛-- Common Tangents(数学几何)
- FZU Problem 2212 Super Mobile Charger(贪心,排序)——第六届福建省大学生程序设计竞赛-重现赛
- 第六届福建省大学生程序设计竞赛不完全题解
- FZU2264,2265,2266 Card Game 系列 (数学,规律)(第七届福建省大学生程序设计竞赛)