數學:平面分割直線

咱們看到過不少直線分割平面的題目,今天的這個題目稍微有些變化,咱們要求的是n條折線分割平面的最大數目。好比,一條折線能夠將平面分紅兩部分,兩條折線最多能夠將平面分紅7部分,具體以下所示。
杭電acm2050 <wbr>折線分割平面html

Inputweb

輸入數據的第一行是一個整數C,表示測試實例的個數,而後是C 行數據,每行包含一個整數n(0<n<=10000),表示折線的數量。測試

Outputurl

對於每一個測試實例,請輸出平面的最大分割數,每一個實例的輸出佔一行。spa

Sample Inputorm

2
1
2htm

Sample Outputblog

2
7get

分析:it

先看N條相交的直線最多能把平面分割成多少塊

杭電acm2050 <wbr>折線分割平面

當添加第N條只顯示,爲了使平面最多, 則第N條直線要與前面的N-1條直線都相交,且沒有任何三條直線教育一個點。

則第N條直線有N-1個交點。因爲每增長N個交點,就增長N+1個平面,因此用N條直線來分隔平面,最多的數是1+1+2+3++n=1+n*(n+1)/2;

 

再看每次增長兩條相互平行的直線

  杭電acm2050 <wbr>折線分割平面

 

當第N次添加時,前面已經有2N-2條直線了,因此第N次添加時,第2N-1條直線和第2N條直線都各能增長2*n-1+1 個平面。

因此第N次添加增長的面數是2[2(n-1) + 1] = 4n - 2 個。所以,總面數應該是

1 + 4n(n+1)/2 - 2n = 2n2 + 1 

 

若是把每次加進來的平行邊讓它們一頭相交

杭電acm2050 <wbr>折線分割平面

則平面13已經合爲一個面,所以,每一組平行線相交後,就會較少一個面,

因此所求就是平行線分割平面數減去N,爲2n2 -n + 1

利用上述總結公式f(n)=2n2 -n + 1

#include<stdio.h>

int main()

{

int T,n;

scanf("%d",&T);

while(T--&&scanf("%d",&n)!=EOF)

printf("%d\n",2*n*n-n+1);

return 0;

}

或者利用公式f(n)=f(n-1)+4*n-1+1

#include<stdio.h>

int main()

{

__int64 s[10001]; 

    int i,T,n;

scanf("%d",&T);

while(T--)

{

s[0]=1;

scanf("%d",&n);

for(i=1;i<=n;i++)

s[i]=s[i-1]+4*(i-1)+1;

prin

相關文章
相關標籤/搜索