Problem Description
给你n, R, r分别代表有n个半径为r的圆,和一个半径为R的圆,问你小球只能放在打球的内切位置,问你能不能放完n个小球
* Input *
4 10 4
5 10 4
1 10 10
Out put
YES
NO
YES
代码:求一个小球占多少角度,然后看看360度能分成多少个小球
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, R, r;
while(~scanf("%d %d %d", &n, &R, &r))
{
if(R < r)//小球大于打球输出NO
{
printf("NO\n");
continue;
}
else if(r <= R && r > R / 2)//只能放一个
{
if(n == 1)
printf("YES\n");
else printf("NO\n");
continue;
}
else {
double du = 2 * asin(1.0 * r / (R - r));//小球所占的角度
double num = 2 * acos(-1.0);//360度
if((num + 1e-10) / du > n) printf("YES\n");//+1e-10才能AC,精度误差的问题
else printf("NO\n");
}
}
}