签到题
时间限制:
1000 ms | 内存限制:
65535 KB
-
描述
-
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
来源
- 原创 上传者
- ACM_贺荣伟
分析:哎,一开始把题意看错了,认为在大圆中最多放多少小圆?没仔细看见这句话每个小圆盘必须接触大圆盘边缘且与其他小圆盘不能相交,但它们可以互相接触。
根据上图,计算出当有n个小圆时的半径大小最大为多少?然后比较得出答案。
CODE:
#include <bits/stdc++.h>
using namespace std;
int main()
{
const double PI=3.1415927;
int n,R,r;
while(cin>>n>>R>>r){
if(n<3){
if(n*r<=R)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
continue;
}
double rr=R*sin(PI/n)/(1+sin(PI/n));
if(rr>=r)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}