路路分蛋糕问题

蛋糕终于是买回来了,路路的朋友们已经迫不及待来吃蛋糕了。为了公平起见,每个人都将分到一块蛋糕。可是路路是一个很懒的家伙,他想用最少的刀数分出他想要的蛋糕块数,不论大小和形状。下面请开动你的脑筋告诉这个懒家伙该怎么做,蛋糕切法按照常理理解。

从题目中提供的条件来看,蛋糕按照常理可以抽象为一个圆形(平面图形),而切开的印痕可以抽象为一条直线,所以这个问题需要研究平面内的n条直线所能分割出平面的块数。

平面的直线分割

这个问题的核心就是研究直线数n和分得块数Sn之间的关系。

首先我们看一些简单的例子:

这里的八幅图简单阐释了在直线数n最小的情况下,分得块数的情况。

进行深入研究发现,在直线数一定的情况下,要取得更多的块数,必须将直线尽可能两两相交,而避免多条直线相交于一点和平行关系的出现。

当平面中有k条直线时,加入一条新的直线,那么最多可以添加出k个新块。(参考资料)

上述理论很容易推导出来:新添加的直线要尽可能多的和已有直线产生交点,才能使得分得的块数尽量的多。同时新产生的交点不能和已有交点重合,也就是尽量保证直线都是两两相交的状态,这样才能做到分得的块数尽量的多。至多产生k个交点,分得块数至多产生k块。

当没有直线时,平面块数记为1。一直保持用最少的刀数得到最多的块数,得到如下表格:

块数

1

2

3

4

5

6

7

8

9

10

11

12

刀数

0

1

2

2

3

3

3

4

4

4

4

5

根据这个表格不难得到这道题的解题要领,但下面我们要讨论的是直线分割平面中直线数和平面块数之间的关系。

进一步讨论直线数和平面块数的关系

当没有任何直线时,平面块数记为1。使用->表示直线数和能够产生最多的平面块数的关系:

0 –> 1

1 –> 2

2 –> 4

3 –> 7

4 –> 11

我们对上述平面块数做一个分解:

0 –> 1  = 1

1 –> 2  = 1 + 1

2 –> 4  = 1 + 1 +2

3 –> 7  = 1 + 1 + 2 + 3

4 –> 11 = 1 + 1 + 2 + 3 + 4

为什么会得到这样的分解呢?

直线数为0时,平面分割的最多块数为1;

直线数为1时,原有直线数为0,添加第一条直线后,增加1块,最多块数为1 + 1 = 2;直线数为2时,原有直线数为1,添加第二条直线后,增加2块,最多块数为1 + 1 + 2 = 4;

直线数为3时,原有直线数为2,添加第三条直线后,增加3块,最多块数为1 + 1 + 2 + 3 = 7;直线数为4时,原有直线数为3,添加第四条直线后,增加4块,最多块数为1 + 1 + 2 + 3 + 4 = 11;

以此类推,得到最多块数与直线数的关系式为:

Sn = 1 + (1 + 2 + 3 + … + n)  (n为直线数)

使用等差数列求和公式将括号内部分化简得:

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

这就是直线平分平面,所得最多块数的公式,也是本题的解题关键。用程序实现这个公式,根据Sn反推n即可。

注意:每增加一个交点,可以多出一个平面!!

最后总结出来的规律就是,当前有n条直线,每增加一条直线,可以多出来n个交点,而多出来n个交点对应到可以多出n+1个平面

http://www.richardma.org/blog/2010/10/17/lines-in-plane/

直线分割平面的公式_直线分割平面-jiangwen127-ChinaUnix博客相关推荐

  1. java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字_灵思致远Leansmall的博客-CSDN博客_java判断字符串只包含数字字母

    import java.util.regex.Matcher; import java.util.regex.Pattern;public class StrValidate {// 纯数字priva ...

  2. java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计

    java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计 [源码请到资源专栏下载] 今天分享的项目是<ssm多用户博客个人网站> 该项目分为2个角色,管理员和用户. 用户可 ...

  3. 2.2.2 胸腰差和胸臀差的应用_米人NOONE_新浪博客

    2.2.2 胸腰差和胸臀差的应用_米人NOONE_新浪博客 2.2.2  胸腰差和胸臀差的应用_米人NOONE_新浪博客 腰差和胸臀差的应用 (2009-06-16 19:24:57) 转载▼ 标签: ...

  4. github项目怎么运行_利用 GitHub 从零开始搭建一个博客

    "NightTeam",一个值得加星标的公众号. 趁着周末,搭建了一下 NightTeam 的官方博客和官方主页,耗时数个小时,两个站点终于完工了. 由于 NightTeam 的域 ...

  5. 数据科学还是计算机科学_您应该拥有数据科学博客的3个原因

    数据科学还是计算机科学 "Start a Blog to cement the things you learn. When you teach what you've learned in ...

  6. alfred 开发_适用于开发人员设计师和博客的7种Alfred工作流程

    alfred 开发 Alfred is one of the best productivity apps for macOS. It lets you reduce dependency on th ...

  7. webbrowser中localhost和发布的地址_发布一款android版博客园官方app

    1.前言 博客园创立于2004年1月,是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益 ...

  8. java点到直线的投影点到经纬度_计算点在平面上的投影坐标

    1.平面方程为一般式 已知一个平面Plane以及任一点\(V_i(x_i,y_i,z_i)\),计算点\(V_i\) 到平面Plane的投影. 给定的平面Plane的方程为: \(Ax+By+Cz+D ...

  9. 语义分割算法性能比较_语义分割江湖那些事儿

    今天的分享者是旷视余昌黔,来自旷视研究院 Detection 组,他将向我们分享旷视研究院 Detection 组近两年持续在做的 Semantic Segmentation 相关工作,代表性成果主要 ...

  10. 子列和列_最大子列和 - fanlinglong - 博客园

    最大连续子序列和问题 给定k个整数的序列{N1,N2,...,Nk },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= k.最 ...

最新文章

  1. [DM] 都是套路: 从上帝视角看透时间序列和数据挖掘
  2. “宜小搭”萌新报到,请多关照!
  3. Spring 事务core 模块-元数据metaData 模块
  4. A20(emmc) 编译环境
  5. caffe模型文件解析_「机器学习」截取caffe模型中的某层
  6. 怎么获取codeforces的数据_飞瓜数据5大功能盘点,帮你抓住2019抖音新一波涨粉红利期!...
  7. loginservlet.java_求助HTTP Status 404 - /Book/servlet/cn.servlet.LoginServlet
  8. 中小企业上云多地域办公组网(SAG)解决方案
  9. Android串口控制台改为root
  10. SDN/NFV在演进中探寻路径
  11. MyBatis3简介
  12. 利用神经网络识别12306验证码—(六)模型应用以及12306实战测试
  13. 假如生活欺骗了你 (普希金诗歌)
  14. SpringBoot+Vue+java医患电子病历档案管理系统ElementUI
  15. OMV安装可道云kodexplorer网盘
  16. Ubuntu 文件系统成为只读模式的解决办法
  17. sim插拔识别时间_智能手机插拔寿命测试标准
  18. HCIE考试考哪些?
  19. react基础教程学习(一)
  20. 有没有办法找回testflight之前测试的软件_关于TestFlight ,你需要知道这些

热门文章

  1. python-expected an indented block问题解决
  2. 易基因表观技术 | m6A常量/微量RNA甲基化测序及案例文献
  3. 天气预报本地准时宝隐私政策
  4. redis读数据超时问题查询
  5. react-native 修改app应用名称
  6. local class incompatible: stream classdesc serialVersionUID = -4601057296962918535, local class seri
  7. pythonsorted降序_【python】 sort、sorted高级排序技巧
  8. 收藏!从十篇顶会论文解读计算机视觉的未来之路!
  9. 【CVPR2022】论文列表与下载——PartFour
  10. 散列表(中):如何打造一个工业级水平的散列表?