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
来个完整的代码吧 展开
试编程求出完全装错情形的所有方式及其总量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
来个完整的代码吧 展开
3个回答
展开全部
分析,假如有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
自己想出来的,应该是对的,楼主自己测试看看,应该没错,代码就不写了,很简单的循环
第一步:第一封信,错误信封情况: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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询