---- 点我 ---- 题目大意:

给你一个正n边形及边长 a和一个正整数L,

求正多边形的面积s,若s大于L,则连接相邻两边的中点,形成新的正多边形,重复这个操作直至s小于L:如图:

Thinking-Bear magic  (计算几何)-LMLPHP

正多边形的面积 : S = n*a^*a / (4tan(α/2);

n 为边数, a为当前边长,α为圆心角;

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long lint;
const double PI = acos(-1.0);
const int INF = ;
const int maxn = ;
double a, n, S, sn, c; void st(double a) //求面积
{
sn = n * a * a / / tan(c/);
} int main()
{
int T;
cin >> T;
while(T--)
{
int cnt = ;
cin >> n >> a >> S;
c = / n / * PI; // 圆心角的弧度值
double b = * (n-) * PI / n / ; // 正多边形的每个角的弧度
sn = n * a * a / / tan(c/); //初始面积
// cout << sn << endl;
while(sn >= S)
{
a *= sin(b/); // 操作后的边长与原边长的关系;
st(a); // 更新面积
cnt++; // 操作次数加加
} cout << cnt << endl;
} return ;
}
05-11 20:26