题目大意:
一个正方形,以每个顶点为中心划圆,这样得到一个3中不同的阴影部分,求各个部分的面积。
算法分析:
这个题目纠结一个小时,开始以为列3个方程就好了,其实只能列出两个方程,你列出的第三个都能通过前两个解出。
先给出一幅图:

从这幅图中我们可以得到下面两个方程,一个是整体的正方形的面积,一个是扇形的面积。
x + 4 * y + 4 * z = a * a;
x + 3 * y + 2 * z = PI * a * a / 4;
但是这样解不出x,y,z。必须还要一个方程,下面我给出求出z的方法,书上说用鸽巢原理,但是没想明白,只有自己手动算了。

通过上图我们知道:绿色的等边三角形的面积(等边三角形的边长为:(2 * sqrt(3) / 3 - 1) * a),绿色三角形加上红色图形的面积的和 = 大的直角三角形的面积(sqrt(3)* a * a / 6)减去扇形的面积(1/12个圆),这样z的面积很贱就能计算出来了。有了z,在加上上面的两个公式,很容易解出x和y。1A。(注意图中圆弧是手画的,不要看错了,红色阴影不是三角形,有一个边是曲线,是圆的边,所以计算面积要计算扇形的面积。)
最终公式:
z = a * a * (1.0 - PI / 6.0 - sqrt(3.0) / 4.0);
y = a * a - PI * a * a / 4.0 - 2.0 * z;
x = a * a - 4 * y - 4 * z;
代码:
#include <stdio.h>
#include <math.h>
#define PI acos(-1.0)
int main()
{
double a;
while(scanf("%lf", &a) != EOF)
{
double x,y,z;
z = a * a * (1.0 - PI / 6.0 - sqrt(3.0) / 4.0);
y = a * a - PI * a * a / 4.0 - 2.0 * z;
x = a * a - 4 * y - 4 * z;
printf("%.3lf %.3lf %.3lf\n", x, 4.0 * y, 4.0 * z);
}
return 0;
}