n个人排队都不站在原来的位置
一、题目描述
有n个人首先站成一排,请问,当n个人第二次再重新排列,每个人都不在原来的位置上,问有多少种站法。例如,原来有3个人,ABC,那么第二次每个人都不在原来的位置上有2种站法,BCA和CAB,这题其实是一道数学题,考察排列组合的知识。
解题思路:假设有n个人,我们的问题规模设为A(n),A(n)代表n个人都不在原来的位置上一共有多少种站法。令第1个人站在非1号位置,一共有n-1种站法,假设第1个人站在2号位置,那么第2个人的站的位置分2类:第一类是第2个人站在1号位置,这样第1个人和第2个人的位置都确定了,那么剩下n-2个位置,问题规模变成了A(n-2),相当于第3个人不站在3号位置,第4个人不站在4号位置.....第n个人不站在n号位置,第二类是第2个人不是站在1号位置,那么问题的规模又变成了A(n-1),相当于第2个人不站在1号位置,第3个人不站在3号位置,第4个人不站在4号位置......第n个人不站在n号位置。所以A(n) = (n-1) * ( A(n-1) + A(n-2) ),这样解题的思路就清晰了,只需要定义一个数组arr[n + 1],首先保存arr[1] = 0,arr[2] = 1,从arr[3]开始,迭代计算 arr[i] = (i - 1) * (arr[i - 1] + arr[i - 2]),最后返回arr[n]就行了,也可以定义三个变量分别保存arr[1],arr[2],arr[3],然后交替赋值,这样能节省空间。为了清晰,我还是以定义数组来演示程序。
二、代码演示
/**
* n个人原来站成一排,重新再排一次,要求每个人都不能
* 站在原来的位置,求有多少种站法。
* @param n
*/
public static int fun(int n) {
if(n <= 1) return 0;
if(n == 2) return 1;
int[] arr = new int[n + 1];
arr[1] = 0;
arr[2] = 1;
for(int i = 3; i <= n; i++) {
arr[i] = (i - 1) * (arr[i - 1] + arr[i - 2]);
}
return arr[n];
}
n个人排队都不站在原来的位置的更多相关文章
- context.getResourceAsStream获取的是部署在服务器上面的文件位置 而不是我们本地的工程位置 意思是说获取的都是web下面的文件位置
context.getResourceAsStream获取的是部署在服务器上面的文件位置 而不是我们本地的工程位置 意思是说获取的都是web下面的文件位置
- POJ 2828 Buy Tickets(排队问题,线段树应用)
POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意: 排队买票时候插队. 给出一些数对,分别代表某个人的想要插入的位 ...
- POJ 2828Buy Tickets(线段树的单点维护)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 20462 Accepted: 10096 Des ...
- poj-2828 Buy Tickets(线段树,排队问题,逆向思维)
题目地址:POJ 2828 Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Yea ...
- hdu 1465 不容易系列之一(错排模板)
不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- AlloyTeam2015前端大会都说了啥
昨天在腾讯大厦参与了鹅厂AlloyTeam召开的AC2015前端大会,度过了充满精彩和收获的一个下午,用一句话形容这次前端Event应该是“诚意满满,干货满满”. 说实话,这次AlloyTeam没有对 ...
- Lucene.net站内搜索—1、SEO优化
目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...
- XSS跨站及利用
(一)软件测试环境以及搭建 测试环境:本地 XAMPP 1.7.1 测试软件:PHP168整站v5.0 软件下载地址 http://down2.php168.com/v2008.rar PHP.ini ...
- 跨站的艺术-XSS Fuzzing 的技巧
作者 | 张祖优(Fooying) 腾讯云 云鼎实验室 对于XSS的漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做Fuzzing:同样是Fuzzing, ...
随机推荐
- 使用Java生成带有下划线字体的文字
HashMap<TextAttribute, Object> hm = new HashMap<TextAttribute, Object>(); hm.put(TextAtt ...
- MS Chart 条状图【转】
private void Form1_Load(object sender, EventArgs e) { string sql1 = "select 类别,coun ...
- 安装flask-mysqldb的时候,提示 mysql_config not found 的解决方法
解决办法: sudo apt-get install libmysqlclient-dev sudo updatedb locate mysql_config 然后进入mysql_config的路径( ...
- Sublime常用插件安装大全
作为前端人员,要找一个很顺手的编辑器真的不容易,我向大家推荐的一款实用前端开发神器,不但占地小,且插件很多,很强大. 下面我向大家介绍一下它的安装及插件的使用方法. 一.安装及安装emmet插件 首先 ...
- Android 桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果
首先是一个小的悬浮窗显示的是当前使用了百分之多少的内存,点击一下小悬浮窗,就会弹出一个大的悬浮窗,可以一键加速.好,我们现在就来模拟实现一下类似的效果. 先谈一下基本的实现原理,这种桌面悬浮窗的效果很 ...
- nodejs请求中获取参数值的方法
req.params.xxxxx 从path中的变量 req.query.xxxxx 从get中的?xxxx=中 req.body.xxxxx 从post中的变量
- 【转发活动】Hey, 是你吗? | 寻"粉"启示
你知道吗 从 A computer on every desk and in every home 让每张办公桌上和每个家庭都有一台计算机 ▼ 到 Where do you want to go to ...
- DB2数据库常用语句
1.快速清空大量数据表数据,但是还原不了 alter table rm_customer activate not logged initially with empty table2.大量导出表语句 ...
- python 之开发工具 sublimetext 3
一.前言 由于个人工作内容太过于繁杂,记忆力又不好,为日后使用的方便,故简单的记录了本篇关于sublimetext 3的初始化安装和部分插件内容的记录.目前最新的版本也是3.0以上版本了,故我这里使用 ...
- OpenSSL命令---s_client
http://blog.csdn.net/as3luyuan123/article/details/16812071 用途: s_client为一个SSL/TLS客户端程序,与s_server对应,它 ...