有一道折線分平面問題:http://acm.hdu.edu.cn/showproblem.php?pid=2050

在做這道題之前,先按照題目所說的先看下“直線分平面”的做法:

如圖所示可以找到規(guī)律:假如當(dāng)有n-1條直線時平面被分為f(n-1)個區(qū)域,要使第n條直線切成的區(qū)域數(shù)最多,那么第n條直線就必須與前n-1條直線相交且不能有同一交點,那么就會增加n-1個交點,多出(n-1+1)=(n)個平面。即f(n)=f(n-1)+n;然后用高中數(shù)列的累加法(把這條式子看做是an=a(n-1)+n就明白了)就可以求出f(n)=n(n+1)/2+1。
由直線分平面的解題步驟可知分出的平面的個數(shù)和交點有關(guān)。

從而類似的,折線分平面的規(guī)律為:假如當(dāng)有n-1條折線時平面被分成f(n-1)個區(qū)域,要使第n條折線切成的區(qū)域數(shù)最多,那么第n條折線就必須與前n-1條折線相交,即與2*(n-1)條線段相交,新增的交點有4*(n-1)個,由圖易知增加4(n-1)+1個平面。即f(n)=f(n-1)+4(n-1)+1;后用高中數(shù)列的累加法(把這條式子看做是an=a(n-1)+4(n-1)+1就明白了)就可以求出f(n)=2n^2-n+1;
解題代碼如下:
#include<stdio.h>
int main()
{
? ? int n;
? ? scanf("%d",&n);
? ? while(n--)
? ? {
? ? ? ? int m;
? ? ? ? scanf("%d",&m);
? ? ? ? printf("%d\n",2*m*m-m+1);
? ? }
? ? return 0;
}
由折線分平面,在網(wǎng)上我又發(fā)現(xiàn)杭電acm題庫還有道拓展到“平面分空間”的題目:
http://acm.hdu.edu.cn/showproblem.php?pid=1290

相應(yīng)的解題思路:從前兩題的規(guī)律可知拓展到三維中所切成的區(qū)域數(shù)和交線有關(guān)。假如當(dāng)有n-1個平面時分出來的控件數(shù)有f(n-1)個,要使第n個平面切下去時有最多的空間數(shù),則第n個平面必須與前n-1個平面相交且不能有共同的交線,即增加n-1條交線,而這n-1條交線把第n個平面最多分成g(n-1)個區(qū)域(g(n)為直線分平面的f(n),即g(n)=n(n+1)/2+1,這里有點難理解,畫個圖或者空間想象一下)。即f(n)=f(n-1)+g(n-1),接著可求出f(n)=(n^3+5n)/6+1;
解題代碼如下:
#include<stdio.h>
int main()
{
? ? int m;
? ? while(scanf("%d",&m)!=EOF)
? ? {
? ? ? ? printf("%d\n",(m*m*m+5*m)/6+1);
? ? }
? ? return 0;
}
總結(jié),有時候不要盲目做題,找規(guī)律便能解決,還有發(fā)現(xiàn)數(shù)學(xué)能力較差還是比較吃虧的。。。