本文主要是介绍「EOJ」2985 正方形和圆,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
小王首先在平面上画一个边长为 N 的正方形 S1,然后又画一个 S1 的内切圆 C1,这算做一次操作。然后接着画 C1的一个内切正方形 S2,和 S2 的一个内切圆 C2,这算第二次操作。他一直进行了 K 次操作。这样平面上就有 K个正方形,K 个圆。
例如当 K=1 时,图形为:
当 K=3 时,图形为:
编一个程序计算那些属于正方形但是不属于圆的面积(在上图中就是指红颜色的区域)。
输入格式
第 1 行:整数 T (1≤T≤10) 为问题数
第 2 ~ T+1 行:每行包括两个整数 N 和 K,分别对应上面描述中的边长和操作数 (N≤10000,K≤100000)
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0:
等),然后在一行中输出一个值表示红色区域的面积,保留六位小数(四舍五入),不要输出多余的信息。
样例
input
3
10 1
10 2
10 3
output
case #0:
21.460184
case #1:
32.190275
case #2:
37.555321
解题思路
设正方形边长为 n n n,内切圆的半径为 r r r,属于正方形但不属于圆形的面积为 r e s res res。
当 k = 1 k=1 k=1时: r = n / 2 r=n/2 r=n/2, r e s = ( 2 r ) 2 − π r 2 res=(2r)^2-πr^2 res=(2r)2−πr2
k > 1 k>1 k>1时,每操作一次,新产生的内切圆的半径为: r = 2 / 2 ∗ r r=\sqrt2/2∗r r=2/2∗r, r e s = r e s + ( 2 r ) 2 − π r 2 res=res + (2r)^2 -\pi r^2 res=res+(2r)2−πr2
1. 定义变量
int i, n, k;
double res = 0, r;
2. 输入 n n n和 k k k
scanf("%d%d", &n, &k);
3. 初始化内切圆半径 r r r
r = 1.0 * n / 2;
4. 求 k k k次操作后属于正方形但不属于圆的面积
for (i = 0; i < k; ++i)
{res = res + pow(2r, 2) = M_PI * pow(r, 2);r = sqrt(2) / 2 * r;
}
这篇关于「EOJ」2985 正方形和圆的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!