算法题
N个人去旅行,在旅店开了N个房间,钥匙挂在大厅的墙上,钥匙上没有标号,每人随手拿一把钥匙,请用程序实现算出所有人都拿错钥匙的可能性有几种。public Class Test{ public static int rank(int num){ //rank,排列 //错排公式:Dn=[n!/e+0.5],e,即 自然对数的底,约等于2.7,[x]为取整函数即x向下取整 double res = Math.floor(factorial(num)/2.71 + 0.5); return (int)res; } public static int factorial(int num){ //Factorial,阶乘 if (num <= 1) return 1; else return num * factorial(num-1); } public static void main(String[] args){ System.out.println(rank(3));//2 System.out.println(rank(4));//9 System.out.println(rank(5));//44 } }