华为春招笔试0304
1.旋转矩阵,顺时针90度旋转M次,M%4值分类讨论
#include<iostream> using namespace std; int main(){ int N,M; cin>>N; int a[N][N]; for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ cin>>a[i][j]; } } cin>>M; int time=M%4; if(time==0){ for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ if(j!=N-1) cout<<a[i][j]<<" "; else cout<<a[i][j]; } cout<<endl; } } else if(time==1){ for(int i=0;i<N;i++){ for(int j=N-1;j>=0;j--){ if(j!=0) cout<<a[j][i]<<" "; else cout<<a[j][i]; } cout<<endl; } } else if(time==2){ for(int i=N-1;i>=0;i--){ for(int j=N-1;j>=0;j--){ if(j!=0) cout<<a[i][j]<<" "; else cout<<a[i][j]; } cout<<endl; } } else if(time==3){ for(int i=N-1;i>=0;i--){ for(int j=0;j<N;j++){ if(j!=N-1) cout<<a[j][i]<<" "; else cout<<a[j][i]; } cout<<endl; } } return 0; }2,k小朋友分n糖果(我写出来了没过,考完发现是一个k写成n了,递归还需练习),用dfs两次即可
#include<iostream> using namespace std; int sss=0; void huisu(int n,int k,int size[][1],int m,int sum){ if(m>k) return; if(sum>n) return; if(sum==n){ for(int i=0;i<k;i++){ for(int j=0;j<size[i][0];j++) cout<<"*"; if(i!=k-1) cout<<"|"; } cout<<endl; return; } for(int j=n-sum;j>=0;j--){ size[m][0]=j; // cout<<"sum="<<sum<<" m="<<m<<" j="<<j<<endl; huisu(n,k,size,m+1,sum+j); } } void huisu2(int n,int k,int size[][1],int m,int sum){ if(m>k) return; if(sum>n) return; if(sum==n){ sss++; return; } for(int j=n;j>=0;j--){ size[m][0]=j; huisu2(n,k,size,m+1,sum+j); } } int main(){ int n,k; cin>>n>>k; int t=0; //t=C(k-1) (n+1) int size[k][1]; for(int i=0;i<k;i++) size[i][0]=0; huisu2(n,k,size,0,0); cout<<sss<<endl; huisu(n,k,size,0,0); return 0; }3.第三题动态规划最短编辑距离(leetcode72)好久之前写了,现在边笔试边复习了下,还行
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; int change(string a,string b){ int sum=0; int len1=a.length(); int len2=b.length(); int df[len1][len2]; if(a[0]==b[0]) df[0][0]=0; else df[0][0]=1; for(int i=1;i<len2;i++){ if(a[0]==b[i]) df[0][i]=i; else df[0][i]=df[0][i-1]+1; } for(int i=1;i<len1;i++){ if(a[i]==b[0]) df[i][0]=i; else df[i][0]=df[i-1][0]+1; } for(int i=1;i<len1;i++){ for(int j=1;j<len2;j++){ if(a[i]==b[j]){ df[i][j]=df[i-1][j-1]; } else{ df[i][j]=min(min(df[i-1][j],df[i][j-1])+1,df[i-1][j-1]+1); } } } return df[len1-1][len2-1]; } int main(){ int N; cin>>N; string str[N]; string res[N]; int sum=0; for(int i=0;i<N;i++){ cin>>str[i]; } for(int i=0;i<N;i++){ cin>>res[i]; } for(int i=0;i<N;i++){ sum+=change(str[i],res[i]); } cout<<sum<<endl; }