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"); } } }