C语言编程题这题咋做啊 10

题目描述某人写了n封信,同时为每一封信写1个信封,共n个信封。如果把所有的信都装错了信封,问共有多少种?(这是组合数学中有名的错位问题。著名数学家伯努利(Bernoull... 题目描述 某人写了n封信,同时为每一封信写1个信封,共n个信封。如果把所有的信都装错了信封,问共有多少种?(这是组合数学中有名的错位问题。著名数学家伯努利(Bernoulli)曾最先考虑此题。后来,欧拉对此题产生了兴趣,称此题是“组合理论的一个妙题”,独立地解出了此题)

试编程求出完全装错情形的所有方式及其总量s。例如,输入n=3,即有3封信需要装入信封,完全装错的一种方式可以表示为312,表示第1封信装入第3个信封,第2封信装入第1个信封,第3封信装入第2个信封。对于n=3,完全装错的方式共有2种,分别是312和231.

输入
输入一个正整数n(2<=n<=6)

输出
输出完全装错情形的所有方式以及装错方式的总量s (每行输出5种方式,一行中的相邻两种方式之间用1个空格隔开。装错方式输出时,从小到大排列,见输出样例)。
样例输入4
样例输出2143 2341 2413 3142 3412
3421 4123 4312 4321
s=9
来个完整的代码吧
展开
 我来答
思念白云蓝天
2012-12-03 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:97.7万
展开全部
分析,假如有N封信和N个信封,
第一步:第一封信,错误信封情况:N-1个
第二步:假设与第一封信装错的信封为第A个信封,则此步就找第A个信封,与之匹配会出错的信封有N-1个
第三步(如果N大于2):与第M封信匹配错误的信封情况为N-2(M≠1,M≠A)
第四步:假设与第M封信装错的信封为第B个信封,则此步就找第B个信封,与之匹配会出错的信封有N-2个
……一次类推
算法就是(N-1)*(N-1)*(N-2)*(N-2)*…*1*1
自己想出来的,应该是对的,楼主自己测试看看,应该没错,代码就不写了,很简单的循环
追问
老师这还简单啊
我都想了几天了
代码到底怎么写啊拜托了
追答
int count=1;//错误情况数统计
for(int i=N-1;i>=1;i--)//N就是信封数
{
count=count*(i^2);
}
mr99_
2012-12-06
知道答主
回答量:14
采纳率:0%
帮助的人:9.3万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
湛掣0hIe34
2012-12-03 · 超过20用户采纳过TA的回答
知道答主
回答量:136
采纳率:0%
帮助的人:63.7万
展开全部
。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式