做法:我们通过分析,可以发现n边形的内n多边形(即按照题意描述,把各边的中点连接起来形成的新的n多边形)
把n边形的边长称为old_a,n边形的边长称为new_a,角度设为d
d = (n-2)*180
new_a = old_a * sin(1/2*j/180*PI);
根据多边形的面积公式S = n*a*a/(4*tan(PI/n))
可以通过迭代,求得答案。
这里有个技巧:如果每次重新算newa 我们会发现重复计算,我们发现new_a是old_a 某倍,所以我们把倍数求一次,再不断迭代即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const double PI = 3.1415926535;
const double eps = 1e-8;
double cul(double n,double oa,double l)
{
double j;
double na;
j = (n-2)*180/(n);
j /=2;
na = oa*sin(j/180*PI);
return na;
}
int main()
{
#ifdef LOCAL_FILE
freopen("in.txt","r",stdin);
#endif // LOCAL_FILE
ios_base::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--)
{
double n;
double a,l,s;
cin>>n>>a>>l;
s = n*a*a/(4*tan(PI/n));
//cout<<s<<endl;
int sum = 0;
double nns = s;
double na = cul(n,a,l);
double be = na/a;
while(nns>l)
{
nns = n*na*na/(4*tan(PI/n));
na = be*na;
sum++;
}
cout<<sum<<endl;
}
return 0;
}