杭电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;//组合数Cmnlong 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;
}