杭电2041-2050

2041

这里进入递归专题了

#include<bits/stdc++.h>
#include<iostream>
//简单递归
using namespace std;
long long int M[45];
int main() {
    int n;
    M[1]=1;
    M[2]=1;
    for(int i=3;i<45;i++){
        M[i]=M[i-1]+M[i-2];
    }
    while(cin>>n){
        while(n--){
            int m;
            cin>>m;
            cout << M[m] << endl;
        }
    }
    return 0;
}

2042

#include<bits/stdc++.h>
#include<iostream>

using namespace std;
//跟猴子吃桃那题一样
//起始值不一样
int main() {
    int n;
    int x,y;
    while(cin>>n){
        while(n--){
            cin>>x;
            y=3;
            for(int i=1;i<=x;i++){
                y=(y-1)*2;
            }
            cout<<y<<endl;
        }
    }
    return 0;
}

2043

#include<bits/stdc++.h>
#include<iostream>

using namespace std;

int main() {
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        int a=0,b=0,c=0,d=0;
        int k;
        int l=s.length();
        if(l>=8&&l<=16){
            for(k=0;k<l;k++){
                if(s[k]>='A'&&s[k]<='Z') a=1;
                else if(s[k]>='a'&&s[k]<='z') b=1;
                else if(s[k]>='0'&&s[k]<='9') c=1;
                else   d=1;
            }
            if((a+b+c+d)>=3) cout << "YES" << endl;
            else cout << "NO"<<endl;
        }
        else cout << "NO"<<endl;
    }
    return 0;
}

2044

#include<bits/stdc++.h>
#include<iostream>

using namespace std;
long long int f[55];
int main() {
    f[0]=1;
    f[1]=2;
    for(int i=2;i<=50;i++) {
        f[i]=f[i-1]+f[i-2];
    }
    int n;
    while(cin>>n) {
        while(n--){
            int x,y;
            cin>>x>>y;
            cout << f[y-x-1] << endl;
        }
    }
    return 0;
}

2045

#include<bits/stdc++.h>
#include<iostream>

using namespace std;
long long int f[55];

int main() {
    f[1]=3;
    f[2]=6;
    f[3]=6;
    for(int i=4;i<=50;i++){
        f[i]=f[i-1]+2*f[i-2];
    }
    int n;
    while(cin>>n){
        cout << f[n] << endl;
    }
    return 0;
}

2046

#include<bits/stdc++.h>
#include<iostream>

using namespace std;
long long int f[55];
int main() {
    int n;
    f[1]=1;
    f[2]=2;
    for(int i=3;i<=50;i++){
        f[i]=f[i-1]+f[i-2];
    }
    while(cin>>n){
        cout << f[n] << endl;
    }
    return 0;
}

2047

#include<bits/stdc++.h>
#include<iostream>

using namespace std;
long long int f[45];
//这种递归从结尾开始数比较好一些
int main() {
    f[1]=3;
    f[2]=8;
    for(int i=3;i<=45;i++){
        f[i]=2*f[i-1]+f[i-2]*2;
    }
    int n;
    while(cin>>n){
        cout << f[n] << endl;
    }
    return 0;
}

2048

#include<bits/stdc++.h>
#include<iostream>
//这个得用long long int,不然会爆
using namespace std;
long long int f[22];
int main() {
    f[1]=0;
    f[2]=1;
    for(int i=3;i<=21;i++){
        f[i]=(i-1)*(f[i-1]+f[i-2]);
    }
    int n;
    cin>>n;
    while(n--){
        int x;
        long long int q=1;
        cin>>x;
        for(int i=1;i<=x;i++){
            q*=i;
        }
        printf("%.2lf%%\n",(double)f[x]/q*(100.0));
    }
    return 0;
}

2049

这个题目中组合数的实现方式值得我们借鉴

#include<bits/stdc++.h>
#include<iostream>

using namespace std;
//错排公式的应用
long long int f[25];
int main() {
    f[1]=0;
    f[2]=1;
    for(int i=3;i<=25;i++){
        f[i]=(i-1)*(f[i-1]+f[i-2]);
    }
    int t;
    cin>>t;
    //错排公式
    
    
    while(t--){
        int n,m;
        cin>>n>>m;
        //组合数Cmn
        long long int ans=1;
        for(int i=0;i<m;i++){
            ans*=(n-i);
        }
        for(int i=0;i<m;i++){
            ans/=(i+1);
        }
        //cout << ans << endl;
        cout<<ans*f[m]<<endl;
    }
    return 0;
}

2050

划分空间问题

#include<bits/stdc++.h>
#include<iostream>

using namespace std;
//划分空间问题
long long int f[10010];
int main() {
    f[1]=2;
    for(int i=2;i<=10000;i++){
        f[i]=f[i-1]+4*(i-1)+1;
    }
    int n;
    cin>>n;
    while(n--){
        int x;
        cin>>x;
        cout<<f[x]<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值