当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,