欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > CCF 矩阵重塑

CCF 矩阵重塑

2024/10/25 6:21:23 来源:https://blog.csdn.net/weixin_73670733/article/details/139663277  浏览:    关键词:CCF 矩阵重塑

第一题:矩阵重塑(一)

 本题有两种思路

第一种 (不确定是否正确 但是100分)

#include<iostream>
using namespace std;
int main(){int n,m,p,q,i,j;cin>>n>>m>>p>>q;int a[n][m];for(i=0;i<n;i++){for(j=0;j<m;j++){cin>>a[i][j];}}int ans=0;for(i=0;i<n;i++){for(j=0;j<m;j++){ans++;cout<<a[i][j]<<" ";if(ans%q==0){cout<<endl;}}}
} 

第二种 哈希表 一对一对一(找到这两个矩阵之间的关系)

map<int,int>ok;int i,j;for(i=0;i<n;i++){for(j=0;j<m;j++){ok[i*m+j]=ans[i][j];}}for(i=0;i<p;i++){for(j=0;j<q;j++){ans[i][j]=ok[i*q+j]; }}

第二题 矩阵重塑(二)

 这道题他的难点在于矩阵的大小是会随着操作进行改变,所以每次需要进行更新,长和宽,这里建议用vector,因为vector独特的性质,很适合,当时我当时考试的时候就是用 数组做的(因为编译器的原因),第一天题只是作为部分功能穿插在第二题中

代码如下

#include<iostream>
#include<map>
#include<vector>
using namespace std;
int ans[10000][10000];
int n,m;
void slove1(int p,int q){map<int,int>ok;int i,j;for(i=0;i<n;i++){for(j=0;j<m;j++){ok[i*m+j]=ans[i][j];}}for(i=0;i<p;i++){for(j=0;j<q;j++){ans[i][j]=ok[i*q+j]; }}n=p;m=q;
}
void slove2(){int a[m][n];int i,j;for(i=0;i<m;i++){for(j=0;j<n;j++){a[i][j]=ans[j][i];}}for(i=0;i<m;i++){for(j=0;j<n;j++){ans[i][j]=a[i][j];}}int tmp=n;n=m;m=tmp;
} 
int main(){int t,i,j;cin>>n>>m>>t;for(i=0;i<n;i++){for(j=0;j<m;j++){cin>>ans[i][j];}}int op,p,q;while(t--){cin>>op>>p>>q;if(op==1){slove1(p,q);}if(op==2){slove2();}if(op==3){cout<<ans[p][q]<<endl;}}
} 

可以把slove1()修改成如下

void slove1(int p,int q){int i,j;int nums[n][m];for(i=0;i<n;i++){for(j=0;j<m;j++){nums[i][j]=ans[i][j];}}for(i=0;i<n*m;i++){ans[i/p][i%q]=nums[i/n][i%n];}n=p;m=q;
}

可以参考leetcode

以上只能得80分

566. 重塑矩阵 - 力扣(LeetCode)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com