HDACM2068
这是一道错排的题目理清思路并不难
import java.util.Scanner;
//1 + 1个错排 +...+n/2个错排
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
if (n == 0) {
break;
}
long count = 1;
long a = 1;
long sum = 1;
for (int i = 1; i <=n/2 ; i++) {
count *= (n-i+1);
a *= i;
sum +=count/a*literal(i);
}
System.out.println(sum);
}
}
public static long literal(long n) {//计算n个错排的个数
long a = 0, b = 1;
long count = 0;
for (int i = 1; i <= n; i++) {
count = (i - 1) * (a + b);
a = b;
b = count;
}
return count;
}
}