HDOJ 2048 神、上帝以及老天爷

http://acm.hdu.edu.cn/showproblem.php?pid=2048
错排:
首先,给人数编号1,2,3,。。。x。。。。,n-1,n
给名字编号1,2,3,。。。y。。。。,m-1,m
当x=1时{剩下(n-1)还需要排列},有两种情况:
(1),1与2配对,剩下n-2还需要错排,即a[n-2]
(2),1不与2配对,则剩下n-1需要错排,即a[n-1]
所以推理的公式:a[n]=(n-1)(a[n-1]+a[n-2])

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        long[] a=new long[25];
        long[] b=new long[25];
        a[1]=0;b[1]=1;
        b[2]=2;
        a[2]=1;
        Scanner sc=new Scanner(System.in);
        for(int i=3;i<21;i++){
            a[i]=(i-1)*(a[i-1]+a[i-2]);
            b[i]=i*b[i-1];
        }
        int n=sc.nextInt();
        while(n-->0){
            int m=sc.nextInt();
            System.out.printf("%.2f",a[m]*1.0/b[m]*100);
            System.out.println("%");
        }
    }

}

你可能感兴趣的:(HDOJ 2048 神、上帝以及老天爷)