
本题思路:本题需要找出顺时针旋转和逆时针旋转的规律,然后就可以解决该问题。
矩阵顺时针90°旋转规律:列号变为行号,(n-行号-+1)变为列号 规律:a[i][j]=b[j][n-i+1];
矩阵逆时针90°旋转规律:行号变为列号,(n-行号+1)变为行号,规律:a[i][j]=b[n-j+1][i];
- #include
-
- constexpr int N=8;
-
- int g[N][N];
- int tmp[N][N];//用来存储旋转后的数组元素
-
- int main()
- {
- std::ios::sync_with_stdio(false);
- std::cin.tie(nullptr);std::cout.tie(nullptr);
-
- for(int i=0;i<5;i++)
- for(int j=0;j<5;j++)
- std::cin>>g[i][j];
-
- int op,n;//op代表是往哪个方向进行旋转,n表示旋转的个数
- int x,y;
-
- std::cin>>op>>n>>x>>y;
-
- //顺时针
- if(op==1){
- for(int i=0;i
- for(int j=0;j
//列号变为行号,(n-行号-+1)变为列号 规律:a[i][j]=b[j][n-i+1]; - tmp[j][i]=g[x-1+n-1-i][y-1+j];
- }
-
- //逆时针
- else if(op==2){
- for(int i=0;i
- for(int j=0;j
//行号变为列号,(n-行号+1)变为行号,规律:a[i][j]=b[n-j+1][i]; - tmp[n-1-j][i]=g[x-1+i][y-1+j];
- }
-
- for(int i=0;i
- for(int j=0;j
- g[i+x-1][j+y-1]=tmp[i][j];
-
- for(int i=0;i<5;i++){
- for(int j=0;j<5;j++)
- std::cout<
" "; - std::cout<
- }
-
- return 0;
- }
二、矩阵幂IO链接
本题思路:本题是矩阵乘法的模板题,矩阵乘法中第一个矩阵的列要等于第二个矩阵的行
一个m∗n的的A矩阵,和一个n∗p的B矩阵相乘,将得到一个m∗p的矩阵C 。

- #include
-
- constexpr int N=15;
-
- int n,k;
- int g[N][N],p[N][N];
- int tmp[N][N];
-
- void mul()
- {
- memset(tmp,0,sizeof tmp);
-
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++){
- int sum=0;
- for(int k=1;k<=n;k++)//矩阵的乘法:第一个矩阵的列需要与第二个矩阵的行相乘
- sum+=g[i][k]*p[k][j];
- tmp[i][j]=sum;
- }
- memcpy(g,tmp,sizeof(tmp));
- }
-
- int main()
- {
- std::ios::sync_with_stdio(false);
- std::cin.tie(nullptr);std::cout.tie(nullptr);
-
- std::cin>>n>>k;
-
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- std::cin>>g[i][j];
-
- memcpy(p,g,sizeof(g));
- for(int j=1;j
mul(); -
- for(int i=1;i<=n;i++){
- for(int j=1;j<=n;j++)
- std::cout<
" "; - std::cout<
- }
- return 0;
- }
-
相关阅读:
Jenkins 太老了 试试它?云原生 CI/CD Tekton
【计算机网络笔记】计算机网络体系结构概念
【八股】在Gradle和Maven之间抉择构建工具
react笔记
简单入门linux【三】linux 组和权限
Raft协议-理论流程
【ZYNQ】IP核_DDR4_SDRAM(MIG)的详细介绍
Java多线程中——部分场景使用实现
奖励多的看不多来了?成都市温江区关于加快推进创新创业载体发展的实施办法和申报条件、奖励和流程
C#学习记录——.NET Framework的组成及C#程序的执行过程
-
原文地址:https://blog.csdn.net/qq_67458830/article/details/132844946