c语言/c++编程题之运动的圆 沿正多边形扫过的面积问题
来源:互联网 发布:python大数据 编辑:程序博客网 时间:2024/05/18 04:32
题目描述
给定一个圆的半径R,圆心的运动轨迹为边长为E的正N边形,求圆在运动过程中覆盖的总面积(若多次覆盖,只计算一次)。
输入
第一行T,表示测试数据有T (T<= 1000)组。
随后的T行,分别代表一组测试数据。
每组测试数据包含3个正整数R(R<=100), E(E<=100), N(3<=N<=100)。
随后的T行,分别代表一组测试数据。
每组测试数据包含3个正整数R(R<=100), E(E<=100), N(3<=N<=100)。
输出
每一行输出保留5位小数,表示圆在运动过程中扫过的面积。
样例输入
11 10 4
样例输出
79.14159
思路:把总面积分为三部分,正多边形外分为两部分,n条边的面积为n个矩形e * n * r,n个顶点的n个扇形恰好为一个圆,正多边形内为一部分,比较已知圆的半径和正多边形的内接圆的半径即可,正n边形内接圆半径r= e / 2.0 / tan( pi / n ) (其中e为正n边形的边长,pi为圆周率)
正n多边形面积s=n*e*e/4.0/tan(pi/n)=r*e*n / 2.0 (其中r为正n边形内接圆半径)
AC代码如下:
#include <cmath>#include <cstdio>#include <algorithm>using namespace std;int cas, r, e, n;const double pi = acos( -1.0 );//圆周率的精确表示int main(){ scanf( "%d" , &cas ); while( cas -- ){ scanf( "%d%d%d" , &r, &e , &n ); double h = e / 2.0 / tan( pi / n );//内接圆半径 double sh = max( 0.0 , h - r ); double S = h * e / 2.0 * n / ( h * h ) * ( h * h - sh * sh ); //正多边形内的面积 printf( "%.5f\n" , pi * r * r + e * n * r + S ); } return 0; }
0 0
- c语言/c++编程题之运动的圆 沿正多边形扫过的面积问题
- CF 614 C Peter and Snow Blower (海伦公式、n个顶点绕圆扫过的最大面积)
- c语言 有趣的求圆面积
- c语言求圆的面积
- 用C语言编程求三角形的面积
- 圆内接正多边形算pi的值面积
- 圆内接正多边形算pi的值面积
- 第7周-正多边形的面积
- C语言函数 求圆的面积的函数
- C语言平面几何14-三角形的面积
- C语言平面几何14-三角形的面积
- c语言 计算三角形的面积
- C语言-计算长方形的面积
- CF#1C Ancient Berland Circus(正多边形最小面积)
- c语言求圆的周长和面积
- C语言 使用结构体计算圆的面积
- 一个关于C语言编程的问题
- C语言编程--爱因斯坦的阶梯问题
- Spring学习总结——Spring实现AOP的多种方式
- Git各种工作流指南
- 5.spring aop
- 第一次写博客
- linux中文件描述符
- c语言/c++编程题之运动的圆 沿正多边形扫过的面积问题
- hdu 1715 (java版)
- iOS应用内付费(IAP)开发步骤列表
- 字符串的排列
- Java WebService 简单实例
- eclipse识别不到真机设备问题的解决
- iOS9 新特性关键字
- ORM的优缺点
- C语言函数的取地址符和星号