(1) n條直線最多分平面問題php
題目:n條直線,最多能夠把平面分爲多少個區域。java
解析:
當有n-1條直線時,平面最多被分紅了f(n-1)個區域。
則第n條直線要是切成的區域數最多,就必須與每條直線相交且不能有同一交點。
這樣就會獲得n-1個交點。這些交點將第n條直線分爲2條射線和n-2條線斷。
而每條射線和線斷將以有的區域一分爲二。這樣就多出了2+(n-2)個區域。url
故:f(n)=f(n-1)+n.net
f(n-1)=f(n-2)+n-1code
……
f(2)=f(1)+2blog
由於,f(1)=2get
因此,f(n)=n*(n+1)/2 + 1io
代碼:class
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); System.out.println(fun(t)); } static int fun(int x){ if (x == 1) return 2; else return fun(x-1)+x; } }
(2) 折線分平面(hdu2050)
題目:http://acm.hdu.edu.cn/showproblem.php?pid=2050
解析:import
根據直線分平面可知,由交點決定了射線和線段的條數,進而決定了新增的區域數。
當n-1條折線時,區域數爲f(n-1)。爲了使增長的區域最多,
則折線的兩邊的線段要和n-1條折線的邊,即2*(n-1)條線段相交。// 2爲折線邊數,n-1爲幾個與幾個折線相加
那麼新增的線段數爲4*(n-1),射線數爲2。
但要注意的是,折線自己相鄰的兩線段只能增長一個區域。
故:f(n)=f(n-1)+4*(n-1)+1
f(n-1)=f(n-2) + 4*(n-2)+1
......
f(2)=f(1) + 4*1 + 1
由於,f(1)=2
因此,f(n)=2n^2-n+1
代碼:
class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while (n-->0) { int t = sc.nextInt(); System.out.println(fun(t)); } } static int fun(int x) { if (x == 1) return 2; else return fun(x - 1) + 4 * (x - 1) + 1; } }
(3) 封閉圖形分平面問題
<a>三角形劃分區域(hdu1249)
題目:http://acm.hdu.edu.cn/showproblem.php?pid=1249
解析:當n-1個三角形時,區域面積數爲 f(n-1) 。
要區域數最多,那麼第n個三角形就必須與前n-1個三角形相交。
則第n個三角形的一條邊就被分割成 2*(n-1)-1條線段與兩個半條的線段 ,
即至關於2*(n-1)條線段。則第 n 個三角形被分割成 3*2*(n-1)條線段。
則增長了 6*(n-1)個面。
故:f(n)=6*(n-1)+f(n-1)
f(n-1)=6*(n-2)+f(n-2)
........
f(2)=6*1+f(1)
由於,f(1)=2
因此,f(n)=3*n*(n-1)+2
AC代碼:
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while (n-->0) { int t = sc.nextInt(); System.out.println(fun(t)); } } static int fun(int x) { if (x == 1) return 2; else return fun(x - 1) + 6 * (x - 1); } }
<b>圓形劃分區域
題目:設有n條封閉曲線畫在平面上,而任何兩條封閉曲線剛好相交於兩點,
且任何三條封閉曲線不相交於同一點,問這些封閉曲線把平面分割成的區域個數。
解析:當n-1個圓時,區域數爲f(n-1).那麼第n個圓就必須與前n-1個圓相交,
則第n個圓被分爲2(n-1)段線段,增長了2(n-1)個區域。
故: f(n)=f(n-1)+2*(n-1)
f(n-1)=f(n-2)+2*(n-2)
......
f(2)=f(1)+2*1
由於,f(1)=2
因此,f(n)=n^2-n+2
代碼:
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while (n-->0) { int t = sc.nextInt(); System.out.println(fun(t)); } } static int fun(int x) { if (x == 1) return 2; else return fun(x - 1) + 2 * (x - 1); } }
(4)平面分割空間問題(hdu1290)
題目:http://acm.hdu.edu.cn/showproblem.php?pid=1290
解析:由二維的分割問題可知,平面分割與線之間的交點有關,即交點決定射線和線段的條數,
從而決定新增的區域數。
試想在三維中則是否與平面的交線有關呢?
當有n-1個平面時,分割的空間數爲f(n-1)。
要有最多的空間數,則第n個平面需與前n-1個平面相交,且不能有共同的交線。
即最多有n-1 條交線。而這n-1條交線把第n個平面最多分割成g(n-1)個區域。
(g(n)爲(1)中的直線分平面的個數)此平面將原有的空間一分爲二,
則最多增長g(n-1)個空間。
故:f(n)=f(n-1)+g(n-1) ( ps: g(n)=n(n+1)/2+1 )
f(n-1)=f(n-2)+g(n-2)
……
f(2)=f(1)+g(1)
由於,f(1)=g(1)=2
因此,f(n)=2+(1*2+2*3+3*4+……+(n-1)n)/2+(n-1)
=[ (1^2+2^2+3^2+4^2+……+n^2) - (1+2+3+……+n ) ]/2 + n+ 1
=(n^3+5n)/6+1