方法一:

对于矩阵旋转可以将其分块,具体来说就是分为 上、下、左、右 四个部分。比如将其顺时针旋转90度,可以先把上部分保存留用,然后把左部分赋值给上部分(此时上部分已经有备份留用的了),下部分赋值给左部分,右部分赋值给下部分,保存的上部分的备份赋值给右部分。简言之,左-->上,下-->左,右-->下,保存-->右。

//上:a[first][i]//下:a[last][last-offset]//左:a[last-offset][first]//右:a[i][last]#include<iostream>
#include<iomanip>//setw(int n)用来控制输出间隔.cout<<'s'<<setw(8)<<'a'<<endl;则在屏幕显示  //s       a;s和a之间有7个空格,setw()只对其后面紧跟的输出产生作用,如上例中,//表示'a'共占8个位置,不足的用空格填充。若输入的内容超过setw()设置的长度,则//按实际长度输出。
using namespace std;
#define N 3
void rotate(int a[N][N])
{int i,offset,first,last,top,layer;for(layer=0;layer<N/2;++layer){first=layer;last=N-1-layer;for(i=first;i<last;++i){offset=i-first;top=a[first][i];//save topa[first][i]=a[last-offset][first];//left -> topa[last-offset][first]=a[last][last-offset];// button -> lefta[last][last-offset]=a[i][last]; //right -> buttona[i][last]=top;//top -> right }}
}
int main()
{int a[N][N],i,j,(*p)[N];p=a;//初始化a[][]并打印for(i=0;i<N;i++){for(j=0;j<N;j++){*(*(p+i)+j) = i*N+j+1;cout<<setw(7)<<a[i][j];}cout<<endl;}cout<<endl<<"the reverseRectangle is complished"<<endl<<endl;rotate(a);//矩阵逆转qfor(i=0;i<N;i++)//打印逆转的矩形 {for(j=0;j<N;j++){cout<<setw(7)<<a[i][j];}cout<<endl;}return 0;
}

逆时针旋转,可以理解为顺时针旋转三次,即调用三次旋转矩阵的函数即可。。。

方法二:(逆时针)(同理可以顺时针)

#include<iostream>
#include<iomanip>
#define N 3
using namespace std;
// 矩阵逆时针旋转90度
void rotate(int data[N][N]) {int tmp[N][N] = {0};//开辟一个空数组for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {tmp[i][j] = data[j][N - 1 - i];//改为 tmp[i][j]=data[N-1-j][i]就是顺时针旋转}}//再存回来for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {data[i][j] = tmp[i][j];}}}
int main(){int data[N][N]={0};int (*p)[N];p=data;//给被旋转的数组初始化for(int i=0;i<N;++i){for(int j=0;j<N;++j){*(*(data+i)+j)=i*N+j+1;}}rotate(data);//旋转数组for(int i=0;i<N;i++)//打印旋转后的数组{for(int j=0;j<N;j++){cout<<setw(7)<<data[i][j];}cout<<endl;}return 0;
}

N*N矩阵旋转问题(顺时针,逆时针)相关推荐

  1. 矩阵旋转(顺时针、逆时针、取转置、倒转)

    输入一个a行b列的矩阵 输出顺时针90度.逆时针90度.取倒置.倒转180度的该矩阵 顺时针 #include <iostream> using namespace std; int ma ...

  2. 二维平面直角坐标系内某一点绕另一点旋转【顺时针/逆时针】之后的坐标

    二维平面直角坐标系内,平面上一点(x1,y1)绕平面上另一点(x2,y2)逆时针旋转b角度,旋转后(x1,y1)对应的新坐标(x,y)计算如下: 同理, 二维平面直角坐标系内,平面上一点(x1,y1) ...

  3. 矩阵逆时针旋转90度JAVA_java实现的顺时针/逆时针打印矩阵操作示例

    java实现的顺时针/逆时针打印矩阵操作.分享给大家供大家参考,具体如下: public class SnakeMatrix { /** * 定义矩阵的阶数 */ private int n; //填 ...

  4. java 矩阵求逆_java实现的顺时针/逆时针打印矩阵操作示例

    java实现的顺时针/逆时针打印矩阵操作.分享给大家供大家参考,具体如下: public class SnakeMatrix { /** * 定义矩阵的阶数 */ private int n; //填 ...

  5. 矩阵旋转(逆时针九十度

    题目描述: 输入一个矩阵,输出其逆时针旋转90°的矩阵 输入: 第一行两个数n,m(m,n<20) 接下来n行,每行m个数,代表一个矩阵 输出: n行,每行m个数,中间以空格隔开,表示旋转后的矩 ...

  6. C语言坐标旋转,c语言矩阵的顺、逆时针旋转

    <c语言矩阵的顺.逆时针旋转>由会员分享,可在线阅读,更多相关<c语言矩阵的顺.逆时针旋转(2页珍藏版)>请在人人文库网上搜索. 1.include #include /矩阵顺 ...

  7. 蓝桥杯:翻转旋转变换(矩阵旋转)

    题目描述: 问题描述 现在有一张n行m列的由"o"和"*"字符组成的图案,需要你做若干次翻转和旋转操作,并输出最后的结果. 输入格式 第一行两个整数n和m 接下 ...

  8. 矩阵旋转(翻转)刷题总结

    矩阵旋转(翻转)问题 旋转 顺时针90(leetcode48) 方法1 方法2 方法3 逆时针90 翻转 上下翻转 左右翻转 对角线翻转 转圈输出(leetcode 54) 旋转 为了面试的时候快点写 ...

  9. python 实现矩阵旋转

    今天做了一道 leetcode 关于矩阵旋转(rotate-image,点击可查看原题)的题目,自己写了一种解法(基于Python),网上也看到一些比较好的解决方式,借此做一个总结. 阅读本文可能需要 ...

最新文章

  1. 程序员新手第一个python web开发框架
  2. 温故知新MySQL--如何在MySQL表中删除重复行
  3. 让你的主机运行ASP.NET 2.0 AJAX程序
  4. awk之特征相同行的合并 ~转
  5. OpenCASCADE:Foundation Classes之插件管理
  6. 如何提升软件交付效能?答案未必如你所想
  7. OPNET网络仿真分析-1.2、OPNET安装教程
  8. Mac合并pdf文件最简单的方法——PDF Expert合并pdf文件教程
  9. 完全背包问题(模板)
  10. 服务器存储扩容技术文档,扩容服务器存储空间
  11. BeanAir—无线传感器测试方案
  12. 163邮箱提示: 535 Error: authentication failed
  13. Windows NTSTATUS Values 进程终止消息标识符
  14. Ubuntu18.04: Git clone 时出现gnutls_handshake() failed: The TLS connection was non-properly terminated
  15. 升级mac最新系统macOS Catalina 10.15
  16. 学习笔记二:IBIS模型编辑报错纠正
  17. python实现二维码识别软件_用 Python 生成 识别二维码
  18. 食物链(经典种类并查集问题)---详解
  19. Elasticsearch架构选型指南——不止是搜索引擎,还有......
  20. 观念决定态度,态度决定一切

热门文章

  1. .axf文件_Keil开发环境如何生成BIN文件
  2. 五金行业:强行业性的进销存系统具体看三项
  3. dota迷你盒子Android5,DotA2超级盒子app
  4. Linux 4.19.111 供电(power supply )子系统
  5. cloud-utils
  6. 方舟linux服务器更新,方舟怎么更新服务器版本 | 手游网游页游攻略大全
  7. Unity学习 HTC Vive Hi5 2.0
  8. WEB项目-音乐播放器
  9. 类360极速浏览器官网html
  10. python四级中考有用的_中考又出新政策:一半的孩子将上不了高中?