商店卖西瓜 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

一般地:

equation?tex=n刀在

equation?tex=k维空间下最多可以切出的块数为

equation?tex=n次二项式展开的前

equation?tex=k%2B1项系数和(没有的项补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开发基础教程之简介

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值