題目大意:
一個正方形,以每個頂點為中心劃圓,這樣得到一個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;}