C++编程练习一-我拿了谁的书?
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
作者“冰非寒: 多看看,多写写,多睡懒觉。”
补充:软件开发 , C++ ,