商店卖西瓜 10斤c语言,算法,西瓜切十刀,最多是多少块?
刚出道面试过一到算法题目,
一个西瓜,保持形状不变,切10刀最多切多少块!
回复内容:
帮你搜到一个答案:
一个西瓜切100刀最多能分成多少块?说明为什么.
你这个问题的本质是n个平面最多可以把空间划分成多少块.我们来看如下三个问题:
1) n个点最多可以把一条直线划分成多少段.通项公式记为A(n)
2) n条直线最多可以把平面划分多成个区域.通项公式记为B(n)
3) n个平面最多可以把空间划分多少块.通项公式记为C(n)
第一个问题,很简单,A(n)=n+1
第二个问题,假设平面上已有n条直线它们把平面划分成最多的区域,那么第n+1条直线下去的时候,为了保证获得最多的区域,那么要求这条直线和之前的n条直线都相交,并且新产生的交点不和之前的交点重合.显然第n+1条直线和之前的n条直线产生n个交点,这n个交点把第n+1条直线划分成A(n)段,每一段都将原来的区域一分为二,于是B(n+1)=B(n)+A(n),将B(1)=2,A(n)=n+1带入很容易求得B(n)=[n(n+1)/2]+1
第三个问题,同理考察第n+1个平面下去多增加了多少块.前面的n个平面都和第n+1个平面相交,在第n+1个平面上留下n条交线,这n条交线最多将第n+1个平面划分成B(n)个区域,每个区域都将原来的块一分为二,于是C(n+1)=C(n)+B(n),将C(1)=2,B(n)=[n(n+1)/2]+1带入可以求得C(n)=[(n^3+5n)/6]+1
提示:利用以下求和公式:
1+2+...+n=n(n+1)/2
1^2+2^2+...+n^2=n(n+1)(2n+1)/6
将n=100带入C(n)得C(100)=166751 如果刀是直的,且是10维空间的西瓜,答案是1024。三维空间也是么? 用刀背切,块数比较多,不过不容易算。。 那些说1024的,都是在中途动了西瓜,或者是十维空间的西瓜。
在不移动西瓜的情况下,第四刀怎么着也切不出16块来。 不懂算法,
但我感觉,第n刀如果与前n-1刀全部相交,这应该是最多块的情况,
1+(1/2)(n(n+1))
56
好吧,这似乎是二维的西瓜, 10刀在各个维度下最多能切出的块数:
1维:11
2维:56
3维:176
4维:386
5维:638
6维:848
7维:968
8维:1013
9维:1023
10+维:1024
一般地:
刀在
维空间下最多可以切出的块数为
次二项式展开的前
项系数和(没有的项补0)。
比如3刀在二维空间下最多切出1+3+3=7块。 我的第一反应是用『贪心算法』,不知道对不对。 二的十次幂
1024 用刀面一拍就完美了,
好吧说笑,接下来是正解。
答主的题目意思不太清楚,没有限定是否可以在切的过程中移动西瓜
1.可以。
那答案前面各路大仙已经说了,10^10=1024
2.不可以。
这个时候就需要小学奥数发功了(小学入坑,考过杭州市34,但对于各路大神来说太差了)
0刀:1块
1刀:2块(废话)
2刀:4块
3刀:8块(切成二阶魔方的形状)
看到这而是不是很惊奇,因为似乎恰好事2^n?,这是因为3刀之内可以保证和每一个之前的平面切出的小块再切成两块
4刀:15块(可以自己试试,但是可以发现就是切不出16块)
这就是因为不能把之前的每个小块都一分为二。那么数列出来了
1,2,4,8,15
咳咳,我们来做个差
1,2,4,7
诶,这个好像也没有什么规律咋办?继续做差
1,2,3没错,这个数列就很完美了,差是1.
那么这样可以递推了
1,2,4,8,15,26,42,64,93,130,176
1,2,4,7,11,16,22,29,37,46,56,67
1,2,3,4,5,6,7,8,9,10
1,1,1,1,1,1,1,1,1,1
(下面一列作为上面一列的公差,并且依次向上)[经知友提醒,把最后一列1111111补上去了]
所以答案应该是176 [email protected] 我写了Python的算法实现。
代码如下:
def A(n):
return n+1
def B(n):
if n==1:
return 2
return B(n-1)+A(n-1)
def C(n):
if n==1:
return 2
return B(n-1)+C(n-1)
print str(C(10))
微信
分享
相关标签:
本文原创发布php教程 ,转载请注明出处,感谢您的尊重!
上一篇:为什么有些编程语言的数组要从零开始算?
下一篇:Mathematica 能否成为取代 Python 乃至其他编程语言的程序设计语言?
相关文章
相关视频
在Django框架中运行Python应用全攻略
在Python的Django框架中创建和使用模版
python获取元素在数组中索引号的方法
浅谈python中截取字符函数strip,lstr...
算法,西瓜切十刀,最多是多少块?
PHP开发基础教程之简介
商店卖西瓜 10斤c语言,算法,西瓜切十刀,最多是多少块?相关推荐
- c语言 一张圆薄饼,切100刀,最多能切成多少块 c语言,甜甜圈上切两刀,最多能切成多少块?...
作者:卜辰璟 所属院系 数学科学系 关键词:甜甜圈切块 几何 摘要 在甜甜圈上切两刀,最多能切成多少块? 这是一个有趣的问题,但是寻找答案的过程体现了解决数学问题的一般流程:通过直觉猜想出可能的方法和 ...
- 任务一:实现销售分析功能关键算法A商店准备在今年夏天开始出售西瓜,西瓜的售价如下,20斤以上的每斤0.85元;重于15斤轻于等于20斤的,每斤0.90元;重于10斤轻于等于15斤的,每斤0.95元;
任务一:实现销售分析功能关键算法 A商店准备在今年夏天开始出售西瓜,西瓜的售价如下,20斤以上的每斤0.85元:重于15斤轻于等于20斤的,每斤0.90元:重于10斤轻于等于15斤的,每斤0.95元: ...
- 经常遇到的10大C语言基础算法(珍藏版源码)
点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握 ...
- c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...
- 10幻方c语言,幻方算法 C语言描述
幻方算法的所有情况描述及C语言表示 2019-03-30 讨论幻方前,先讨论一下动态申请数组大小 众所周知 在C语言中必须指定数组的大小 否则会报错.如果你不知道你要申请多大的数组怎么办?初始化一个非 ...
- 分油问题回朔法c语言算法,用回溯法求“韩信分油”问题所有解
裴南平 摘要:回溯法是一种常用的计算机程序设计方法.使用回溯法解决"韩信分油问题"也称"泊松分酒问题",在算法中保存每一步执行的中间结果,程序扩展前,判斷程序是 ...
- c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!
原标题:单片机常用的14个C语言算法,要熟记在心哦! 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么 ...
- c语言循环程序设计教案,10 《C语言程序设计》教案 第三章 程序的控制结构(6)—循环结构 while和do while.doc...
10 <C语言程序设计>教案 第三章 程序的控制结构(6)-循环结构 while和do while.doc C 语言程序设计课程教案表 授课题目 第三章 程序的控制结构 (6) 循环结构 ...
- c语言哪个编译软件能够将整个工程自动生成调用图_这10个C语言技巧让初学者少走180天弯路!...
硬件设计师最常见的工作内容是通过写代码来测试硬件.这10个C语言技巧(C语言仍然是常见的选择)可以帮助设计师避免因基础性错误而导致某些缺陷的产生并造成维护方面的困扰. 技巧 1:不要使用"G ...
- c语言编常见算法,5个常见C语言算法
5个常见C语言算法 十进制转换为二进制的递归程序 字符串逆置的递归程序 整数数位反序,例如12345->54321 四舍五入程序(考虑正负数) 二分法查找的递归函数 #include #incl ...
最新文章
- 简书php硬件交互,php设计模式——适配器模式
- 语言中什么时候加大括号_日本留学语言学校申请季你知道是几月吗?从什么时候开始准备...
- python 启动django时报错MySQLdb._exceptions.OperationalError: (2059, <NULL>)和django.db.utils.OperationalEr
- windows下用eclipse配置c++开发环境
- Linux内存Mem和Swap那点事,Linux内存 mem 和 swap
- vue compile添加html,咱来聊聊 Vue - compile
- 洛谷 - P1758 [NOI2009]管道取珠(计数dp)
- requestparam的作用_关于@RequestMapping和@RequestParam注解(四)
- WebBrowser设置打印页眉页眉和页边距
- linux的vim怎么配置文件路径,Linux_Linux系统配置VI或VIM的技巧,1、VI或VIM的配置文件的路径 - phpStudy...
- 【恋上数据结构】递归(函数调用过程、斐波那契数列、上楼梯、汉诺塔、递归转非递归、尾调用)
- 企业级CentOS操作系统的磁盘分区
- C# 调用系统API 内核 简单样例
- python如何读二进制文件_Python如何读写二进制文件
- android activity singletask,Android必读之SingleTop、SingleTask等Activity启动方式的区别
- 在线等比数列求和计算器
- 如何配置Gitlab的双因子验证(Two-Factor Authentication)
- 传奇盗号木马清除手记(转)
- 没有基础适合学习java吗?
- 狄利克雷分布通俗讲解
热门文章
- 2019 计蒜之道 初赛 第一场 A-商汤的AI伴游小精灵
- 110 Ruby 版本管理器【Rails后端开发训练营】
- VHDL移位操作的两种方式,及乘除运算中小数倍的解法
- ubuntu计算机名用户名,修改ubuntu的用户名(注意用户名和主机名的区别)
- 机智的技术童鞋,你能解开这个贺岁彩蛋吗?
- 从一道面试题掌握ES6的综合运用(有彩蛋)
- java 项目中遇到的问题 和解决方案_java开发常见的问题及解决办法 - java开发中遇到的难点有哪些_java开发常见的问题及解决办法...
- [CF 417D]Cunning Gena:状压DP
- TP4056 充电电路学习借鉴
- 激活后服务器无限重启,服务器无限重启