平面分割

题目:有n条直线互相相交,其中共有p(p>=2)个交点,求能分割出的平面的个数。

一看这题,是怎样推出是一个递推式的呢?

首先考虑每一条直线,他们相交共有两种情况:一种是全都相交于一点,另一种是不相交于一点。

那好,先来分析相交于一点的情况:

一条直线把平面分割成两个。

两条直线把平面分割成四个。

三条直线把平面分成六个;

四条直线把平面分成八个

……

n条直线把平面分成2*n个。

这样若干条直线相交于一点的情况就能推出来一个式子了。

接着再来考虑另一种情况,就是他们不是相交于一点的:

我们不妨也来以每一条直线为基本单位来推,假设p=3,那么从第四条直线开始思考:

第四条直线在原来的六个平面上又加了四个平面,2*3+4=10

再假设p=4,从第五条直线开始思考:

第五条在原来的八个平面上加了五个平面 2*4+5=13

所以能找出规律:p+1条直线添加了p+1个平面,要考虑一般情况,还得再考虑p+2,p+3……p+n这些直线。

还是上面的p=4的图,当添加第六条直线时:

平面的个数又加了六个,则可以推出第七条加了七个,第n条加了n个。

所以综合以上几种情况,可以得出递推式为2*p+(n+p+1)*(n-p)/2,这一个式子就可以把所有式子全部包含了,代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,p;
int main()
{
  scanf("%d%d",&n,&p);
  printf("%d",2*p+(n+p+1)*(n-p)/2);
  return 0;
}

这是一道运用分类讨论思想的递推题,只要把每种情况的式子列好,那么整合两种情况就可以解决。

posted @ 2018-01-20 08:43  Zhoier  阅读(540)  评论(0编辑  收藏  举报