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;
}