果園裡的樹(劉汝佳的小白5 4 3)詳解

2021-06-22 13:58:09 字數 1405 閱讀 4456

果園裡的樹排列成矩陣。他們的x和y的座標均是1~99的整數。輸入若干個三角形,依次統計每個三角形內部和邊界上共有多少棵樹。

輸入:1.5  1.5       1.5  6.8      6.8  1.5

10.7  6.9     8.5  1.5      14.5  1.5

此題用三角形有向面積來解,求有向面積2倍

的函式為:

double area(double x0,double y0,double x1,double y1,double x2,double

,y2)

若求其面積,即沒有方向的:則為fabs(s)/2;

可以用行列式來記住這個式子:

|x0  y0  1|

2s=|x1  y1  1|=x0*y1+x2*y0+x1*y2-x2*y1-x0*y2-x1*y0;          

|x2  y2  1|                           

若三角形三個點按逆時針排列,則有向面積為正,否則為負。

對乙個三角形abc和平面上任意一點o:都有            sabc=soab+sobc+soca;      

判斷點p是否在三角形內部或者是邊界上的方法是:o點分出的三個三角形按oab,obc,oca的順序得到的結果與原來的大三角形sabc的同號或為0。

簡單**如下:

#include #include #define inf 1e-10

double area2(double x0,double y0,double x1,double y1,double x2,double y2)

double min(double a,double b)

int main()

{ int i,j,count;

double x0,x1,x2,y0,y1,y2,s0,s1,s2,s3;

double minx,maxx,miny,maxy;

while(~scanf("%lf%lf%lf%lf%lf%lf",&x0,&y0,&x1,&y1,&x2,&y2))

{ minx=min(x0,min(x1,x2));miny=min(y0,min(y1,y2));

maxx=max(x0,max(x1,x2));maxy=max(y0,max(y1,y2));

count=0;

for(i=minx;i<=maxx;i++)

for(j=miny;j<=maxy;j++)

{s0=area2(x0,y0,x1,y1,x2,y2);

s1=area2(i,j,x0,y0,x1,y1);

s2=area2(i,j,x1,y1,x2,y2);

s3=area2(i,j,x2,y2,x0,y0);

if(fabs(s0-s1-s2-s3)

果園裡的樹

果園裡的樹排列成矩陣。它們的x和y座標均是1 99的整數。輸入若干個三角形,依次統計每乙個三角形內部和邊界上共有多少棵樹。樣例輸入 1.5 1.5 1.5 6.8 6.8 1.5 10.7 6.9 8.5 1.5 14.5 1.5 樣例輸出 15 17這題是數學類題目,沒有什麼技巧 此題用三角形有向...

果園裡的樹

園裡的樹排列成矩陣。它們的x和y座標均是1 99的整數。輸入若干個三角形,依次統計每乙個三角形內部和邊界上共有多少棵果樹。如圖所示 樣例輸入 1.5 1.5 1.5 6.8 6.8 1.5 10.7 6.9 8.5 1.5 14.5 1.5 樣例輸出 1517 分析 此題用有向面積來解,首先看函式 ...

層次遍歷(劉汝佳的小白6 3 2)綜合

在網上借鑑了 白書介紹了對一棵二叉樹進行層次遍歷的過程,經過我的總結和優化之後,發表一篇部落格在這裡,留著忘記的時候回來看看。題目如下 按照某種方式輸入一棵二叉樹,然後從上到下 從左到右 按照層次 輸出各結點的值。每個結點先輸入所要賦的數值,後輸入路徑。輸入過程由 l 和 r 表示。相鄰結點之間用空...