題目出自杭電
相關的問題資料可以在以下鏈接中找到:
http://blog.csdn.net/wu_lai_314/article/details/8219236
(1)先講n條直線最多分平面問題
題目大致如:n條直線,最多可以把平面分爲多少個區域。
析:當有n-1條直線時,平面最多被分成了f(n-1)個區域。則第n條直線要是切成的區域數最多,就必須與每條直線相交且不能有同一交點。這樣就會得到n-1個交點。這些交點將第n條直線分爲2條射線和n-2條線段。而每條射線和線斷將已有的區域一分爲二。這樣就多出了2+(n-2)個區域。
故:f(n)=f(n-1)+n
=f(n-2)+(n-1)+n
……
=f(1)+1+2+……+n
=n(n+1)/2+1
(2) 折線分平面(hdu2050)
根據直線分平面可知,由交點決定了射線和線段的條數,進而決定了新增的區域數。當n-1條折線時,區域數爲f(n-1)。爲了使增加的區域最多,則折線的兩邊的線段分別要和n-1條折線的邊相交,即2 * (n-1)條線段相交。那麼新增的線段數爲4 *(n-1),射線數爲2。但要注意的是,折線本身相鄰的兩線段只能增加一個區域。
故:f(n)=f(n-1)+4(n-1)+2-1
=f(n-1)+4(n-1)+1
=f(n-2)+4(n-2)+4(n-1)+2
……
=f(1)+4+4*2+……+4(n-1)+(n-1)
=2n^2-n+1
#include <stdio.h>
int main()
{
int a,n;
scanf("%d",&a);
while(a--)
{
scanf("%d",&n);
printf("%d\n",2*n*n-n+1);
}
return 0;
}