ECNU 计科机试2018
2018年计科学硕、计科专硕、计算中心的复试机试题。时长3.5小时
A. 1+1
代码:
#include <iostream> using namespace std; int main(){ int a,b; char c; cin>>a; c=getchar(); cin>>b; int res; if(c=='+') cout<<a+b; else if(c=='-') cout<<a-b; else cout<<a*b; }
B. LOGO
代码:
#include <iostream> using namespace std; void FD(int l){ if(l==0) cout<<"FD 1"<<endl; else{ int k=1; for(int i=0;i<l;i++) k=k*3; cout<<"FD 1/"<<k<<endl; } } void Func(int n,int l){ if(n==0) FD(l); else{ Func(n-1,l); cout<<"LD 60"<<endl; Func(n-1,l); cout<<"LD 240"<<endl; Func(n-1,l); cout<<"LD 60"<<endl; Func(n-1,l); } return; } int main(){ int n; cin>>n; Func(n,n); }
C. Easy Sort
代码:
#include <iostream> #include <algorithm> using namespace std; int sign(string x){ if(x[0]=='-') return 1; else return 0; } bool compare(string x,string y){ if(sign(x)==1 && sign(y)==0) return true; else if(sign(x)==0 && sign(y)==1) return false; else if(sign(x)==0 && sign(y)==0){ if(x.size()>y.size()) return false; else if(x.size()<y.size()) return true; else{ for(int i=0;i<x.size();i++){ if(x[i]>y[i]) return false; else if(x[i]<y[i]) return true; } return false; } } else{ if(x.size()>y.size()) return true; else if(x.size()<y.size()) return false; else{ for(int i=1;i<x.size();i++){ if(x[i]>y[i]) return true; else if(x[i]<y[i]) return false; } return true; } } } int main(){ int n; cin>>n; string arr[n]; for(int i=0;i<n;i++) cin>>arr[i]; sort(arr,arr+n, compare); for(int i=0;i<n;i++) cout<<arr[i]<<" "; }
D. Boss's Boss
代码:
#include <iostream> using namespace std; int main(){ int n; cin>>n; int lead[n+1],member[n+1]; for(int i=1;i<=n;i++) cin>>lead[i],member[i]=1; for(int i=1;i<=n;i++){ int k=i; while(lead[k]!=0) member[lead[k]]++,k=lead[k]; } for(int i=1;i<=n;i++) cout<<member[i]<<" "; }
E. Snake Matrix
代码:
#include <iostream> using namespace std; int matrix[20001][20001]={0}; void circle(int pos,int step){ int i=pos,j=pos; matrix[i][j]=matrix[i][j-1]+1; for(int k=0;k<step;k++) matrix[i][j+1]=matrix[i][j]+1,j++; for(int k=0;k<step;k++) matrix[i+1][j]=matrix[i][j]+1,i++; for(int k=0;k<step;k++) matrix[i][j-1]=matrix[i][j]+1,j--; for(int k=0;k<step-1;k++) matrix[i-1][j]=matrix[i][j]+1,i--; } int main(){ int n; cin>>n; int pos=1,step=n-1; while(step>=0){ circle(pos,step); pos++; step-=2; } for(int i=1;i<=n;i++){ int sum=0; for(int j=1;j<=n;j++) sum+=matrix[i][j]; cout<<sum<<endl; } }
这题数组没办法存到200001那么大,估计没法通过全部测试用例。
注:
文章部分内容转载自https://malic.xyz/archives/40