直线分平面到折线分平面再到平面分空间

有一道折线分平面问题:http://acm.hdu.edu.cn/showproblem.php?pid=2050


直线分平面到折线分平面再到平面分空间_第1张图片

在做这道题之前,先按照题目所说的先看下“直线分平面”的做法:


直线分平面到折线分平面再到平面分空间_第2张图片

如图所示可以找到规律:假如当有n-1条直线时平面被分为f(n-1)个区域,要使第n条直线切成的区域数最多,那么第n条直线就必须与前n-1条直线相交且不能有同一交点,那么就会增加n-1个交点,多出(n-1+1)=(n)个平面。即f(n)=f(n-1)+n;然后用高中数列的累加法(把这条式子看做是an=a(n-1)+n就明白了)就可以求出f(n)=n(n+1)/2+1。

由直线分平面的解题步骤可知分出的平面的个数和交点有关。


直线分平面到折线分平面再到平面分空间_第3张图片

从而类似的,折线分平面的规律为:假如当有n-1条折线时平面被分成f(n-1)个区域,要使第n条折线切成的区域数最多,那么第n条折线就必须与前n-1条折线相交,即与2*(n-1)条线段相交,新增的交点有4*(n-1)个,由图易知增加4(n-1)+1个平面。即f(n)=f(n-1)+4(n-1)+1;后用高中数列的累加法(把这条式子看做是an=a(n-1)+4(n-1)+1就明白了)就可以求出f(n)=2n^2-n+1;

解题代码如下:

#include

int main()

{

    int n;

    scanf("%d",&n);

    while(n--)

    {

        int m;

        scanf("%d",&m);

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

    }

    return 0;

}

由折线分平面,在网上我又发现杭电acm题库还有道拓展到“平面分空间”的题目:

http://acm.hdu.edu.cn/showproblem.php?pid=1290


直线分平面到折线分平面再到平面分空间_第4张图片

相应的解题思路:从前两题的规律可知拓展到三维中所切成的区域数和交线有关。假如当有n-1个平面时分出来的控件数有f(n-1)个,要使第n个平面切下去时有最多的空间数,则第n个平面必须与前n-1个平面相交且不能有共同的交线,即增加n-1条交线,而这n-1条交线把第n个平面最多分成g(n-1)个区域(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

int main()

{

    int m;

    while(scanf("%d",&m)!=EOF)

    {

        printf("%d\n",(m*m*m+5*m)/6+1);

    }

    return 0;

}

总结,有时候不要盲目做题,找规律便能解决,还有发现数学能力较差还是比较吃亏的。。。

你可能感兴趣的:(直线分平面到折线分平面再到平面分空间)