Description
期末考了,龙少和沧海把希望都寄托在课本上,谁知万恶的监考老师要每个学生把书放到讲台上,就这样,这场考试,龙少过的很不爽,考完后,随便拿了本书就走了,回到宿舍后发现不是自己的书,诅丧的他突然陷入沉思,参加考试的30人如果都像他一样拿错书的情况有多少种?(假设每个学生都带书且只带一本)
Input
输入数据的第一行为一个整数T,代表测试数据的个数,接下来T行,每行个包括一个整数N,代表一个教室中学生的个数
Output
对于每组测试数据,输出一个整数,代表拿错书的情况总数
Sample Input
3
1
2
3
Sample Output
0
1
2
Hint
http://baike.baidu.com/view/668994.htm
参考代码
#include <iostream> using namespace std; const int N = 31; const int M = 50; int main(){ int cases,n,i,j,map[N][M]; for(i = 0;i < M;++ i){ map[1][i] = 0; } for(i = 2;i < N;i ++){ for(j = 0;j < M;++ j){ map[i][j] = map[i - 1][j] * i; } if(i % 2 == 0){ map[i][0] += 1; }else{ map[i][0] -= 1; } for(j = 0;j < M;++ j){ if(map[i][j] > 9){ map[i][j + 1] += map[i][j] / 10; map[i][j] %= 10; }else if(map[i][j] < 0){ map[i][j] += 10; map[i][j + 1] -= 1; } } } cin>>cases; while(cases --){ cin>>n; if(n == 1){ cout<<0<<endl; continue; } bool b = false; for(i = M - 1;i >= 0;-- i){ if(map[n][i] > 0 || b){ cout<<map[n][i]; b = true; } } cout<<endl; } return 0; }