题目描述
给你两个圆的圆心坐标和半径,请判断一下两个圆是下列哪种情况:
- 包含:一个圆在另外一个圆内,两圆无交点
- 内切:一个圆在另外一个圆内,一个交点
- 相交:两个圆交于两点
- 外切:两个圆交于1点,且圆没有嵌套
- 相离:圆没有嵌套且没有交点
输入
第一行是一个整数T(1≤T≤1000),表示样例的个数。
每个样例是两行,每行三个整数,x,y,r(1≤x,y,r≤1000),分别表示一个圆的圆心坐标和半径
输出
依次每行输出一个样例的结果,如果包含输出1,内切输出2,相交输出3,,外切输出4,想离输出5。
样例输入
5 0 0 2 0 0 1 0 0 2 1 0 1 0 0 2 1 0 2 0 0 2 3 0 1 0 0 2 4 0 1样例输出
1 2 3 4 5
解题思路:这就是初高中数学题, 不细讲啦。
AC代码:
#include <stdio.h>
#include <math.h>
int main()
{
double d;
int T,t,x1,y1,r1,x2,y2,r2;
scanf("%d",&T);
while ( T --)
{
scanf("%d %d %d",&x1,&y1,&r1);
scanf("%d %d %d",&x2,&y2,&r2);
d = (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
d = sqrt(d);
if(r1>r2) {t = r1, r1 = r2, r2 = t;} // 令r1<r2;
if (r1+d < r2) puts("1"); // 内含;
else if (r1+d == r2) puts("2"); // 内切;
else if (r1+r2 > d) puts("3"); // 相交;
else if (r1+r2 == d) puts("4"); // 外切;
else if (r1+r2 < d) puts("5"); // 相离;
}
return 0;
}