签到题
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
hrw最近看到一个有趣的几何题,题目描述是这样的:一个大圆盘里面放入许多小圆盘,每个小圆盘必须接触大圆盘边缘且与其他小圆盘不能相交,但它们可以互相接触,每个小圆盘具有相同的半径,求此条件下能否放入n个小圆盘。
-
输入
- Multiple sets of test data,The first line contains three integers n, R and r (1 ≤ n ≤ 100, 1 ≤ r, R ≤ 1000) — the number of plates, the radius of the table and the plates' radius.and you can think the pi is 3.1415927 输出
- Print "YES" (without the quotes) if it is possible to place n plates on the table by the rules given above. If it is impossible, print "NO".Remember, that each plate must touch the edge of the table. 样例输入
-
4 10 4 2 10 10
样例输出
-
YES NO
因为题目特殊要求,只需要考虑最极端的情况,那么就是所有的
小圆都紧密排列在边缘,然后直接按三角形的相关定理和函数进行求了.......
一幅借助理解的图.......然后这道题就没难度了............
#include<stdio.h>
#include<math.h>
#define p 3.1415927
int main()
{
double R,r;int n;
while(~scanf("%d%lf%lf",&n,&R,&r))
{
if(n<=2)
{
if(n*r<=R)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
continue;
}
double tp=asin(r*1.0/(R-r)),s=p/n;//这里求出的是实际度数和最大预计度数
if(tp<=s)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}