本来想用java,但是第一题确实挺简单的就用c++了,之后也不想换了,接着用c++
1.方阵顺时针旋转
#include
using namespace std;
//之前练华为题的时候经常超时,所以这次把特殊情况单列出来,少几个循环
//但结果是代码冗长,如果真的参加工作了,不建议大家把代码写的这么墨迹
int main(){
int n;
cin>>n;
if(n==1){
int temp;
cin>>temp;
cin>>n;
cout<<temp;
return 0;
}//特殊情况
int a[11][11]={0};//行数 列数
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
int m;
cin>>m;
m=m%4;//少转几圈
if(m==0){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j];
if(j!=n){
cout<<" ";
}
}
cout<<endl;
return 0;
}//特殊情况
}
int b[11][11]={0};
for(int k=0;k<m;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
b[i][j]=a[n-j+1][i];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=b[i][j];
}
}//旋转再复位
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<b[i][j];
if(j!=n){
cout<<" ";
}
}
cout<<endl;
}
return 0;
}
2.n个礼物 m个小朋友分礼物.有多少情况,并画出来
#include
#include
using namespace std;
void dfs(int index,int n,int k,int a,string path,vector&res){
if(index==a){
res.push_back(path);
return ;
}
if(n>0){//递归自己,列出情况
dfs(index+1,n-1,k,a,path+"*",res);
}
if(k>0){
dfs(index+1,n,k-1,a,path+"|",res);
}
}
int main(){
int n,k;
cin>>n>>k;
int total=0;
vector res;
int a=n+k-1;
dfs(0,n,k-1,a,"",res);
cout<<res.size()<<endl;
for(int i=0;i<res.size();i++){
cout<<res[i]<<endl;
}
return 0;
}
3.给两个字符串a,b,问用最少用几步操作能将a改成b(操作:增加,删除,更改字符)
这个我不会,看样子应该是dp问题,如果有大佬能给个代码或思路来交流学习,不胜感激