2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 D-Thinking-Bear magic(数学)

题目链接:https://www.nowcoder.com/acm/contest/163/D

题意:给你一个正多边形的边数n,边长l,一个面积 s ,让你连接各个边的中点形成新的正n边形(这是一次操作),问你多少次操作后正n边形的面积小于等于 s 。

思路:我们可以推出正n边形的面积公式:p = (n * l * l / (2 * tan(x))) / 2; 正n边形的中心角为360 / n,x是中心角除以2。

每一次连接各个边的中点形成的新正n边形,改变的只是正n边形的边长。

根据边心距我们可以推出变换的关系是:l *= cos(x)。

在使用三角函数时 我们要将弧度(直接输入的数字是弧度)转换成角度:

角度转弧度:用角度乘以π/180

弧度转角度:用弧度乘以180/π

π 我们通常用 acos(-1.0) 来表示。

#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        double n, l, s, p, x;
        scanf("%lf%lf%lf",&n,&l,&s);
        x = pi / n; //转化后的角度
        p = (n * l * l / (2 * tan(x))) / 2; //原面积
        int cnt = 0;
        while(p > s)
        {
            l *= cos(x); //操作后的边长
            p = ((n * l * l) / (2 * tan(x))) / 2; //操作后的面积
            cnt++;
        }
        cout << cnt << endl;
    }
}

猜你喜欢

转载自blog.csdn.net/sugarbliss/article/details/81449142
今日推荐