社区
数据结构与算法
帖子详情
求助一道算法题
kookhit
2007-01-24 11:18:11
题目:书架上有N本书,全部取下来,然后再全部放回去,要求每本书都不在原来的位置上,求有多少种摆放方法。
函数原形:int fun(int N);
例如:输入3返回2;
要考虑算法性能,
大家帮忙看看怎么做比较好
...全文
1008
44
打赏
收藏
求助一道算法题
题目:书架上有N本书,全部取下来,然后再全部放回去,要求每本书都不在原来的位置上,求有多少种摆放方法。 函数原形:int fun(int N); 例如:输入3返回2; 要考虑算法性能, 大家帮忙看看怎么做比较好
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
44 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wxspll
2007-05-07
打赏
举报
回复
mark
yaunx
2007-01-26
打赏
举报
回复
而且n!(1/2!-1/3!+1/4!-1/5!+...+(-1)^n/n!)也只是使用了容斥原理一步就得出的结论
yaunx
2007-01-26
打赏
举报
回复
我记得有个IOI金牌说过,数学题算法做,算法题数学做
中间件XL
2007-01-26
打赏
举报
回复
我觉得推到一定程度没必要再推,再推变成纯数学问题,失去了问题的域意义,失去了面向对象的重用思想。不过你当它数学题做就没问题,我相信ls的递推公式要推到:n!(1/2!-1/3!+1/4!-1/5!+...+(-1)^n/n!)
还有很长的路。
kookhit
2007-01-26
打赏
举报
回复
我自己又想了下,得到如下计算:
Sn=(N-1)(Sn-2 + (N-2)(N-3)....1)
=(N-1)!+(N-1)Sn-2
这个递推公式应该对了吧
(Sn-2中n-2是下标)
kookhit
2007-01-26
打赏
举报
回复
谢谢mathe()
果然是高手,这个方法不错,
还有没有其他方法呢?
VBDONET
2007-01-26
打赏
举报
回复
俺写了一个递推的公式,貌似要用递归来实现,很痛苦~~~
我算了前面8个,和楼上的结果一样,上班时间不能太嚣张~~不算下去了。
暂时也无法得到什么能精简算法的东西
只有一点是可以肯定的,结果肯定是n-1的倍数
wang430903
2007-01-26
打赏
举报
回复
0, 1, 2, 9, 44, 265, 1854, 14833, 133496, 1334961, 14684570, 176214841, 2290792932, 32071101049, 481066515734, 7697064251745, 130850092279664, 2355301661033953, 44750731559645106, 895014631192902121, 18795307255050944540...........
mathe
2007-01-26
打赏
举报
回复
n!/e的四舍五入
就是公式n!(1/2!-1/3!+1/4!-1/5!+...+(-1)^n/n!)的简化
这是因为
e^(-1)=1/2!-1/3!+1/4!-1/5!+...+(-1)^n/n!+....
所以
n!/e = n!(1/2!-1/3!+1/4!-1/5!+...+(-1)^n/n!+...)
去掉前面n-1项后,余下的为
n!*((-1)^(n+1)/(n+1)!+.....)
=(-1)^(n+1)*[1/(n+1)-1/(n+1)(n+2)+1/(n+1)(n+2)(n+3)-...)
这个数据绝对值小于1/(n+1)<=1/2
所以在n>=1时,我们就可以用
n!/e来替换,误差小于1/2
由于结果是整数,我们可以直接用n!/e四舍五入来替换了。
中间件XL
2007-01-26
打赏
举报
回复
可以写代码
F(1)=1
F(1)-->F(2)
...
dufusjw
2007-01-26
打赏
举报
回复
对szlhj()的分析稍加改动得到:
F(n)=n!-[C(n-1,n)F(n-1)+C(n-2,n)F(n-2)+...+C(n-i,n)F(n-i)+...+C(1,n)F(1)+1];
其中C(m,n)表示排列组合中从n个中取m个不排序的可能数;
怎么求出F(n)表达式?
wang430903
2007-01-26
打赏
举报
回复
f(n,m)=(n!)/((n-m+1)!)*f(n-m,0) 0=<m<=n -----------2式
--------------------------------------------------------------------
上面的式子有错误应该为:
f(n,m)=(n!)/((n-m+1)!)/m!*f(n-m,0)
wang430903
2007-01-26
打赏
举报
回复
不知道错在哪里
wang430903
2007-01-26
打赏
举报
回复
设n本书m本不动共有f(n,m)
则有 f(n,0)=n!-f(n,1)-f(n,2)……f(n,n) -----------1式
又有 f(n,m)=(n!)/((n-m+1)!)*f(n-m,0) 0=<m<=n -----------2式
再由 f(1,0)=0 f(1,1)=1 递推最终得到结果
最终结果真搞笑,我自己也不信 f(n,0)=n-1
下面是我的代码 很乱 -- :(
#include <stdio.h>
int f(int n,int m)
{
if(n<m||n<0||m<0)
printf("error!!!");
if(n==m)
return 1;
if(n==1&&m==0)
return 0;
if(n==1&&m==1)
return 1;
if(m==0)
{
int temp=1;
for(int i=1;i<n+1;i++)
{
temp*=i;
}
for(i=1;i<n+1;i++)
{
temp-=f(n,i);
}
return temp;
}
int temp=1;
for(int i=0;i<m;i++)
{
temp*=(n-i);
}
return (temp*f((n-m),0));
}
void main()
{
for(int i=1;i<10;i++)
for (int k=0;k<=i;k++)
printf("f(%d,%d)------>%d\n",i,k,f(i,k));
}
renzaijiang
2007-01-26
打赏
举报
回复
好象是n-1啊
1 2 3
2 3 1
3 1 2
2 种
1 2 3 4
2 1 4 3
3 4 2 1
4 3 1 2
3种
yaunx
2007-01-25
打赏
举报
回复
可以使用容斥原理证明,编辑公式太麻烦,我就偷懒不写了...
yaunx
2007-01-25
打赏
举报
回复
呃,想了下,给个计算式
n!(1/2!-1/3!+1/4!-1/5!+...+(-1)^n/n!)
kookhit
2007-01-25
打赏
举报
回复
ls的兄台看好了,是每本书都不在原来的位置上
yaunx
2007-01-25
打赏
举报
回复
貌似我题目理解错了...
yaunx
2007-01-25
打赏
举报
回复
n!-1
加载更多回复(24)
大厂
算法
面试真
题
解析
相信很多朋友们无论是在学校还是已经工作都了解
算法
和数据结构的重要性。无论是实际的工作还是面试,这都是基础的基础,是你不可或缺的一部分。我也相信有大量的
算法
和数据结构的课程可以让你去了解什么是链表,什么是树等等。那我们这门课有什么不一样呢?Chris出品必是精品。因为我们这门课不是一门传统的
算法
和数据结构的课,却是最有用和性价比最高的
算法
课程。我把它叫做面试最后一公里 -
算法
和数据结构这门课使用现在各个大厂的面试真
题
来讲解,告诉你1.
算法
面试应该怎么思考2.
算法
面试怎么回答才最完美3. 如何高效的准备
算法
面试4. 面试前不可不看的课程还等什么,年薪50万的职位已经在向你招手。
第一篇博客,从
一道
算法
题
谈起
题
目描述 Description 刚进我们的新学校~首先感受到了校园的样子与小学完全不同~来到了我们的机房,我也看到了几个同学~有的认识,有的不认识!(mdzz,废话) 现在,为了让大家更熟悉,更容易交流,于是老师决定排座位!现在,老师通过同学们的自我介绍明白了同学们互相的熟悉度,老师安排好座位后,告诉了同学们一个惊天的好消息(MHZ:哇,快说!):我们可以去参观广播操的排练现场!
腾讯
算法
面试
题
:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问
题
。无独有偶,今天笔者又发现有网友吐槽了
一道
腾讯的面试
题
,我们一起来看看。 腾讯
算法
面试
题
:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖
求助
到。二面腾讯,其中一个
算法
题
:64匹...
程序员
求助
:被腾讯
一道
面试
题
难住了
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问
题
。无独有偶,今天笔者又发现有网友吐槽了
一道
腾讯的面试
题
,我们一起来看看。 程序员
求助
:腾讯面试
题
,64匹马8个跑道,多少轮选出最快的四匹 一名程序员发帖
求助
到。二面腾讯,其中一个
算法
题
:64匹马,8个跑道,选出最快的四匹马。最少跑几个回合能够选出最快的四匹马。这样的
求助
也是瞬间引来了网友的围观与议论,我们先来看看网友们都是怎么解
180道大厂
算法
工程师(Python语言)面试
题
合集
[34] 在排序数组中查找元素的第一个和最后一个位置left=mid+1else:# 从小区间向内探查,然后确定范围=target:left+=1=target:right-=1'''
题
目:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章