今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:
- 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;
- 待所有字条加入完毕,每人从箱中取一个字条;
- 如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”
现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?
因为是不放回问题,所以结果共有N的阶乘,无人中奖的方式则可以参考错排算法问题,
错排的结果/总结果就是无人中奖的概率。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
float num1 = factorial(n);
float num2 = count(n);
float result = (num2/num1)*100;
System.out.println(String.format("%.2f",result)+"%");
}
public static float factorial(int n){
float result = 1;
if(n == 0){
return 1;
}else if (n>0){
result = n * factorial(n-1);
}
return result;
}
public static float count(int n){
if(n==1){
return 0;
}else if(n==2){
return 1;
}else {
return (n-1)*(count(n-1)+count(n-2));
}
}
}