一道数学题

2010-07-29 22:00:59 +08:00
 marshluca
有a,b,c,d,四个人,互相传球,从a开始传出,经过5次传球后,球回到a的手里,总共有多少种传球的方法 ?
8405 次点击
所在节点    数学
22 条回复
apple
2010-07-29 22:13:31 +08:00
a~a
中间三次,bcd来排,排除含有bb,bbb这种类型的排列,就是答案了。
lianghai
2010-07-29 22:21:28 +08:00
唉……高中时的数学题现在我已经能把自己算晕了……算出一个 96 然后 google 一下,得知错了……
校正了一个疏忽才得出正确答案……
marshluca
2010-07-29 22:32:00 +08:00
非常欢迎大家写代码
aligo
2010-07-29 23:18:37 +08:00
4个人排成一圈,或在排成1字一排貌似最后都没法传到a手里呢
[code]
var count = 0;
var routes = [];
var limit = 5;
var circle = false;
var found = function (route)
{
routes.push(route);
//alert(route);
}
var pass = function (cur, time, route)
{
if ((cur === 1) && (time === limit)) {
count++;
found(route);
}
if (circle && (cur > 4)) {
cur = 1;
}
if (circle && (cur < 1)) {
cur = 4;
}
if ((cur < 5) && (cur > 0) && (time < limit) ) {
pass(cur + 1, time + 1, route + '>');
pass(cur - 1, time + 1, route + '<');
}
}
pass(1, 0, '');
alert(count + ':' + routes);
[/code]
Majia
2010-07-29 23:46:28 +08:00
(-1)^n(x-1)[1-(-x+1)^(n-1)]/x

n为传球次数,x为人数(x>=3)
Majia
2010-07-29 23:50:33 +08:00
貌似写得不太好

(-1)^n*(x-1)*[(1-(-x+1)^(n-1)]/x
marshluca
2010-08-08 12:32:26 +08:00
# python
def compute(current,remain):
if remain == 0:
if current == 'a':
return 1
else:
return 0
else:
return sum(compute(next,remain-1) for next in ['a','b','c','d'] if next!= current)


print compute('a',5)
xhacker
2010-08-08 15:01:41 +08:00
楼上的程序很慢,我也写一个来献献丑。n 是传球次数,m 是人数。O(n*m^2)的。

这里不能贴代码,先贴在别处。
http://paste.ubuntu.com/474828/
rveo
2010-08-08 15:21:06 +08:00
1 + 2 + 3 + 4 = 10 种
rveo
2010-08-08 15:25:27 +08:00
这种题,是常见的小学 4 - 5 年级奥林匹克数学题,不过,在前面加了个障眼法( 4 个人)。

在数学表达式里,似乎是 ( N - 1 )! 表示从 1 + ( 1 + 1 ) + (( 1 + 1 ) + 1 )…… 这样的累加。

我不记得 我这个描述 是否正确了。
rveo
2010-08-08 15:29:28 +08:00
额。。应该错了。。N! 是 阶乘累加,正确的是 1 + 2 + 3 + …… + ( N - 1 ) + N 这样。
Livid
2010-08-08 18:17:37 +08:00
@xhacker 这里支持 GitHub 的 Gist。
xhacker
2010-08-08 19:51:00 +08:00
marshluca
2010-08-08 20:58:39 +08:00
贴上ruby,代码不漂亮:

http://gist.github.com/513999
xhacker
2010-08-08 21:12:20 +08:00
@marshluca 试试把 n (传球次数)改大一些,然后阁下的程序就很悲剧……
marshluca
2010-08-08 21:15:23 +08:00
@xhacker 被你发现了... 这是个小学奥数题

我这还有一道小学三年级的奥数:
一个六位数,分别用2,3,4,5,6乘它,得到的五个新数仍是由原数中的六个数字组成,只是位置不同,则此六位数是多少?
xhacker
2010-08-08 21:22:05 +08:00
@marshluca 呵呵,编程解决奥数题……太邪恶了~
marshluca
2010-08-08 21:25:47 +08:00
@xhacker 你可以用这个法子来诱惑你娃儿学编程 哈哈
marshluca
2010-08-08 21:28:57 +08:00
不编程:
先确定最高位和个位,最高位只能是1. 用2~9分别乘2,3,4,5,6,分别得五个数,取其个位,可定只有7去乘才出现1,那样就确定了六个数是,7.4.1.8.5.2,而最高位是1个位是7,乘以2就可以定十位是8,别的数字不行,类推下去即可得出结果是 ?
xhacker
2010-08-08 21:31:14 +08:00
@marshluca 哈哈哈,我啥时候都有娃儿了~
让我想起来前一阵编程解决排列组合问题……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1107

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX