0%

UVA10432 题解

一、题意分析

没啥好说的,就是求半径为 $r$ 的圆的内接正 $n$ 边形

二、公式推导

$\because \angle AOB = \dfrac{360^{\circ}}{n}$

$\therefore \sin \angle AOB = \dfrac{j}{r} = \sin \dfrac{360^{\circ}}{n} = \sin \dfrac{2 \pi}{n}$ (计算机中的三角函数以弧度计算)

$\therefore j = \sin \dfrac{2 \pi}{n} \times r$

$\therefore S_{\triangle_{ABO}} = \dfrac{1}{2}r \times j = \dfrac{1}{2}r \times (\sin \dfrac{2 \pi}{n} \times r) = \dfrac{1}{2}r^2\sin \dfrac{2 \pi}{n}$

$\therefore S_{\odot_{O}} = nS_{\triangle_{ABO}} = \dfrac{1}{2}nr^2\sin \dfrac{2 \pi}{n}$

三、AC 程序

程序比较简单,就不写注释了

Python

1
2
3
4
5
6
7
8
9
10
11
import math

while True:
try:
r, n = input().split(' ')[:2]
except:
print()
break
r, n = eval(r), eval(n)
ans = n * (r ** 2) * math.sin(2 * math.pi / n) / 2
print('%.3f'%ans)

C++

必须吐槽一下,UVA 居然不支持 C++20,害的我没法用 std::number::pi

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <bits/stdc++.h>
using namespace std;

double r, n;
const double pi=3.14159265358979;

int main(){
while (cin>>r>>n){
double ans = n * r * r * sin(2 * pi / n) / 2.0;
cout<<fixed<<setprecision(3)<<ans<<endl;
}
return 0;
}