题目链接:https://ac.nowcoder.com/acm/problem/213861
到主站看:https://blog.csdn.net/weixin_43346722/article/details/110258124
题目
scimoon 做不出题,随手在纸上画了两个正圆
第一个圆圆心为 ,半径为
第二个圆圆心为 ,半径为
这两个圆的圆弧有没有交呢
输入
第一行一个正整数 ,表示数据组数
接下来 行,每行六个整数,分别为
,意义如题中描述一致
输出
输出共 行
对于每组数据,若有交则输出 YES,否则输出 NO
样例输入
1 1 1 1 1 2 1
样例输出
YES
数据范围
对于所有数据,
思路
这道题是一道数学题。
要一个很坑的地方就是如果两个圆碰到了,就算是相交。
那可以看出两个圆碰不到有两种情况:
第一种(上图),可以很明显的看出是 。(
就是两个圆心之间的距离)

第二种(上图),那这又是怎么样呢?
是 。
那如果这两个条件都不满足,那就是相交,不然就是不相交。
代码
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
int T;
double x1, y11, r1, x2, y2, r2, dis;
int main() {
scanf("%d", &T);
for (int times = 1; times <= T; times++) {
scanf("%lf %lf %lf %lf %lf %lf", &x1, &y11, &r1, &x2, &y2, &r2);
dis = sqrt((x1 - x2) * (x1 - x2) + (y11 - y2) * (y11 - y2));//算出两点距离
if (dis <= r1 + r2 && dis >= abs(r1 - r2)) printf("YES\n");
else printf("NO\n");
}
return 0;
} 
京公网安备 11010502036488号