首页 > n个人分配到n个位置上的种类问题

n个人分配到n个位置上的种类问题

n个人,其编号分别为1,2,3,…,n;n个位置,其编号亦从1~n,随机分配这n个人到n个位置上,每个人的编号与位置编号均不同的情况总共有多少种?

以4个人为例,为了区别人的编号与位置编号,假设人分别A,B,C,D,位置编号为a,b,c,d。那么一共同有以下9种情况:
+++++++
a b c d
+++++++
B A D C
D A B C
C A D B


B D A C
C D A B
D C A B


B C D A
C D B A
D C B A

前几天求职过程中遇到的一个问题,原题是问至少有一个人占的位置跟编号相同的总数,我的想法是计算全部不在自己编号位置上的种数,然后用全排列总数减这个数,问题是我不知道怎么计算前面这个……


这叫做「错排问题」


"""
该题目的python输出方法
"""
count=0;
def f(t,s):
    if len(s)>=1 and s[-1] == len(s)-1:
        return;
    if len(t)==0:
        global count;
        count+=1;
        print(s);
        return;
    for v in range(0,len(t)):
        temp = t.pop(v);
        s.append(temp);
        f(t,s);
        t.insert(v,temp);
        s.pop();
n = input("请输入排序个数:\n");
f(list(range(0,int(n))),[]);
print(count);
【热门文章】
【热门文章】