博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU2050(分平面问题)
阅读量:5081 次
发布时间:2019-06-13

本文共 2090 字,大约阅读时间需要 6 分钟。

分平面问题:

 

    一、n条直线最多分平面问题。

n条直线最多可以把平面分成多少个区域?

    此类问题主要采用递归的思想。当有n-1条直线时,平面最多被分成了f(n-1)块区域。如果要使第n条直线分的区域最多,就要让第n条直线与每条直线相交且交点不能重合。这样就会的到n-1个交点,将第n条直线分成了n-2条线段和两条射线。通过观察发现每一条线段或者直线都将其通过的区域一分为2,于是平面就多出了n块区域。

    即:

        f(n) = f(n-1) + n

              = f(n-2) + (n – 1) + n

              …

              = f(1) + 2 + 3 + … + n

              = n*(n + 1)/2 + 1

    二、 n条折线最多分平面问题。

n条折线最多可以把平面分成多少个区域?

    类比于直线。当有n-1条折线时,平面最多被分成了f(n-1)块区域。如果要使第n条折线分的区域最多,就让它的两条射线分别与每一条折线的两条射线相交且交点互不重合。这样第n条折线的每条射线上就得到了2(n-1)个交点,将射线分成了2(n-1)条线段和一条射线。但是折角处的两条线段之分出了一块区域,所以一共多出了4(n-1)+1块区域。

    即:

        f(n) = f(n-1) + 4(n – 1) + 1

              = f(n-2) + 4(n – 2) + 4(n – 1) + 2

              …

              = f(1) + 4[1 + 2 + … (n-1)] + n

              = 2n^2 + n

    三、 封闭曲面分平面问题。

设有n条封闭曲线在平面上,任何两条封闭曲线相交于两点,任何三条封闭曲线不相较于一点,问这些封闭曲面把平面分割成的区域个数。

    为了简化思考可将封闭曲线看成圆,当有n-1个圆形时将平面分成了f(n-1)块区域。现增加第n个圆,于是此圆的周边上有2(n-1)个点,曲线被分成了2(n-1)个圆弧,每个圆弧可使平面增加一个区域。于是平面增加了2(n-1)个区域。

    即:

        f(n) = f(n-1) + 2(n – 1)

              = f(n-2) + 2(n – 2) + 2(n – 1)

              …

              = f(1) + 2[1 + 2 + … + (n – 1)]

              = n^2 – n + 2

   四、平面分割空间问题。

    由类比的方法可以猜出,平面分割空间的个数应该与平面的交线个数有关。于是当有n-1个平面时将空间分成了f(n-1)块区域。增加第n个平面时,另其与每一个平面都有一条交线且每一条交线互不重合互不平行。于是平面上就有了n-1条直线。由问题一可知这些直线一共将次平面分成了n(n-1)/2+1块面,显然每一块面都可使空间多出一块区域。于是空间多出n(n-1)/2+1块区域。

    即:

        f(n) = f(n-1) + n(n – 1)/2 + 1

              = f(n-2) + (n – 2)(n – 1)/2 + n(n – 1)/2 + 2

              …

              = f(1) + 1*2/2 + 2*3/2 + 3*4/2 + … + n(n – 1)/2 + (n – 1)

              = [(1^2 + 2^2 + … + n^2) – (1 + 2 + … + n)]/2 + n + 1

          由平方和公式 1^2 + 2^2 + … + n^2 = n(n + 1)(2n + 1)/6得

       f(n) = (n^3 + 5n)/6 + 1

折线分割平面

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 23336    Accepted Submission(s): 15903

Problem Description

我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。

Input

输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。

Output

对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。

Sample Input

2 1 2

Sample Output

2 7

Author

lcy

Source

Recommend

lcy

| | |

 

 

1 #include
2 3 int main() 4 { 5 int c; 6 scanf("%d", &c); 7 while(c--) { 8 int n; 9 scanf("%d", &n);10 printf("%d\n", 2 * n * n - n + 1);11 }12 return 0;13 }
View Code

 

 

 

转载于:https://www.cnblogs.com/xzrmdx/p/5178016.html

你可能感兴趣的文章
c#编程:使用"like“查询access数据库查询为空
查看>>
Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的...
查看>>
oracle常用管理命令
查看>>
构建之法第四章两人合作
查看>>
kmp-洛谷P2375 动物园
查看>>
杂曲歌辞·杨柳枝
查看>>
swiftmailer时没有设置https的选项,才可以发送成功。在linux下面
查看>>
C#程序分析
查看>>
(6)javascript 基本概念--- -- 函数
查看>>
在Windows服务中托管 ASP.NET Core的坑
查看>>
Linux MySQL主从复制(Replication)配置
查看>>
多表联查
查看>>
suoi46 最大和和 (线段树)
查看>>
JQ轮播小demo
查看>>
【原创】大叔问题定位分享(20)hdfs文件create写入正常,append写入报错
查看>>
2016 西班牙 国家德比(西甲31轮)
查看>>
CArichive每次读写一行
查看>>
让QT支持中文的方法
查看>>
dos批处理知识
查看>>
多文档界面的实现(DotNetBar的superTabControl)
查看>>