A - 母牛的故事 #include<iostream> using namespace std; long long a[100]; int main() { int n; while(cin>>n) { a[1]=1;a[2]=2;a[3]=3;a[4]=4; if(n==0) break; if(n<=4) cout<<n<<endl; else { for(int i=5;i<=n;i++) { a[i]=a[i-1]+a[i-3]; } cout<<a[n]<<endl; } } return 0; } ———————————————————————————————————————————— B - Fibonacci Again #include<iostream> using namespace std; int a[10000004]; int main() { int n; a[0]=1; a[1]=2; for(int i=2;i<=1000000;i++) { a[i]=(a[i-1]+a[i-2])%3; } while(cin>>n) { if(a[n]==0) cout<<"yes"<<endl; else cout<<"no"<<endl; } return 0; } —————————————————————————————————————————————— C - Prime Ring Problem 1. #include<iostream> #include<cstring> #include<cmath> using namespace std; int a[22],b[22],mark[22]; int prime(int x)//判断是否是素数 { int o=sqrt(x); if(x==1 || x==4) return 1; if(x==2 || x==3) return 0; for(int i=2;i<=o;i++) { if(x%i==0) return 1; } return 0; } void print(int n,int b[])//输出 { for(int i=1;i<=n;i++) { if(i!=1) cout<<' '; cout<<b[i]; } cout<<endl; } int judge(int front,int last,int k,int n)//递归判断素数环 { if(prime(front+last)) return 0; b[k]=last; if(k==n && !prime(last+1)) { print(n,b); return 1; } mark[last]=0;//标记是该数在子函数内不能在出现,但是回归主函数时必须释放 for(int i=2;i<=n;i++) { if(mark[i] && judge(last,i,k+1,n)) break; } mark[last]=1; return 0; } int main() { int count=1,n; while(cin>>n) { for(int i=1;i<=n;i++) { mark[i]=1; } b[1]=1; cout<<"Case "<<count++<<":"<<endl; if(n==1) cout<<n<<endl;//1单独输出 else for(int i=2;i<=n;i++) { judge(1,i,2,n); } cout<<endl; } return 0; } 2. #include <iostream> #include <algorithm> #include<cmath> using namespace std; int a[30],vis[30]; int prime(int x)//判断是否是素数 { int o=sqrt(x); if(x==1 || x==4) return 1; if(x==2 || x==3) return 0; for(int i=2;i<=o;i++) { if(x%i==0) return 1; } return 0; } void dfs(int n,int m){ if(n>m && prime(a[1]+a[m])==0){ for(int i=1;i<=m;i++){ if(i!=1) cout<<' '; cout<<a[i]; } cout<<endl; } for(int i=2;i<=m;i++){ if(vis[i]==0){ a[n]=i; if(n==1 || (prime(i+a[n-1])==0)){ vis[i]=1; dfs(n+1,m); vis[i]=0; } } } } int main(){ int n,count=1; while(cin>>n){ cout<<"Case "<<count++<<":"<<endl; a[1]=1; vis[1]=1; dfs(2,n); cout<<endl; } return 0; } —————————————————————————— D - 一只小蜜蜂... #include<iostream> using namespace std; __int64 a[52]; int main() { __int64 N,c,b,i; a[0]=1; a[1]=1; for(i=2;i<=50;i++) { a[i]=a[i-1]+a[i-2]; } cin>>N; while(N--) { cin>>c>>b; cout<<a[b-c]<<endl; } return 0; } ———————————————————————————————————— E - Children’s Queue #include<iostream> #include<cstring> using namespace std; const int maxn=1100; int a[maxn][maxn]; int main() { int n,i,j; memset(a,0,sizeof(a)); a[0][0]=0; a[1][0]=1; a[2][0]=2; a[3][0]=4; a[4][0]=7; for(i=5;i<=1001;i++) { for(j=0;j<=1007;j++) { a[i][j]+=(a[i-1][j]+a[i-2][j]+a[i-4][j]); if(a[i][j]>=10) { int h=a[i][j]; a[i][j]=h%10; a[i][j+1]+=(h/10); } } } while(cin>>n) { for(i=1007;i>=0;i--) { if(a[n][i]) break; } for( ;i>=0;i--) { cout<<a[n][i]; } cout<<endl; } return 0; } —————————————————————————————————— —————————————————————————————————————————— F - Problem B #include<iostream> #include<cstring> using namespace std; const int maxn=1100; int a[maxn][maxn]; int main() { int n,i,j; memset(a,0,sizeof(a)); a[0][0]=0; a[1][0]=1; a[2][0]=2; a[3][0]=4; a[4][0]=7; for(i=5;i<=1001;i++) { for(j=0;j<=1007;j++) { a[i][j]+=(a[i-1][j]+a[i-2][j]+a[i-4][j]); if(a[i][j]>=10) { int h=a[i][j]; a[i][j]=h%10; a[i][j+1]+=(h/10); } } } while(cin>>n) { for(i=1007;i>=0;i--) { if(a[n][i]) break; } for( ;i>=0;i--) { cout<<a[n][i]; } cout<<endl; } return 0; } G题类似 ———————————————————————————— H - 放苹果 #include<iostream> #include<cstring> using namespace std; int a[21][21]; int apple(int m,int n) { if(a[m][n])return a[m][n]; else if(m==1 || n==1) { a[m][n]=1; return a[m][n]; } else if(m<n) { a[m][n]=apple(m,m); return a[m][n]; } else if(m==n) { a[m][n]=1+apple(m,m-1); return a[m][n]; } else { a[m][n]=apple(m-n,n)+apple(m,n-1); return a[m][n]; } } int main() { int T,m,n; cin>>T; while(T--) { memset(a,0,sizeof(a)); cin>>m>>n; cout<<apple(m,n)<<endl; } return 0; } |