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)。

输出

每一行输出保留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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 烧伤后水泡破了怎么办 烫伤泡破了红肿怎么办 烧伤第二天水泡破了怎么办? 烧伤后换药特别疼怎么办 盐酸溅到皮肤上怎么办 磷性磷酸酶高440怎么办 浓硫酸沾到皮肤上怎么办 浓硫酸溅到皮肤上怎么办 浓硫酸滴到皮肤上怎么办 浓硫酸洒在皮肤上怎么办 浓硫酸溅到眼睛里怎么办 盐酸弄到眼睛了怎么办 稀硫酸进眼睛里怎么办 草酸弄到皮肤上怎么办 大理石被盐酸烧发白怎么办 香薰蜡烛化了怎么办 吸入了大量燃烧纸气体怎么办 狗链条上锈了怎么办 思维迟钝反应慢嘴笨怎么办 小孩思维慢反应迟钝怎么办 苹果4g网络慢怎么办 医院没有号了怎么办啊 fgo宝具动画卡顿怎么办 死刑犯在执行前死亡怎么办 汕头交警 违章扣分怎么办办理 幼儿园家长不保险应该怎么办 csgo掉白银坑了怎么办 错过教资认定现场确认怎么办 乡村建设导致民房开裂怎么办 项目部公章丢了怎么办 手机掉了没有卡怎么办 苹果系统软件删了还是出现怎么办 钉钉检测到作弊怎么办 电脑麦说话声音小怎么办 穿越火线麦克风有杂音怎么办 手闲不住就抠东西怎么办 大便堵在肛门口怎么办 在外地流量不够用怎么办 电脑键盘数字键没反应怎么办 音响音量键坏了怎么办 摩托罗拉移动电话通话没声音怎么办