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
參考代碼
view plaincopy to clipboardprint?
#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
#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
作者“冰非寒: 多看看,多寫寫,多睡懶覺。”