spiral matrix
2018-06-17 23:50:45来源:未知 阅读 ()
如图,生成如此旋转的矩阵 输入行N,列M,求上述矩阵
假定 纵向为x轴,横向为y轴,从1开始
层数 k=min(i,j,N+1-i,M+1-j)
k层矩阵的长 l=N-(k-1)*2 宽 w=M-(k-1)*2
矩阵左上角的坐标值为(k,k),根据外层矩阵的长宽可以算出数值,进而确定当前矩阵(i,j)的值
缺点 :代码中有很多重复计算,可以通过记录一些值来减少计算次数
#include<stdio.h> #define min(x,y) (x)>(y)?(y):(x) int N,M; int foo(int,int); int main() { while(scanf("%d %d",&N,&M)==2) for(int i=1;i<=N;i++) { for(int j=1;j<=M;j++) { printf("%3d ",foo(i,j)); } printf("\n"); } } int foo(int i,int j) { int k=min( min(i,j) , min(N+1-i,M+1-j) ); int l=N-(k-1)*2, w=M-(k-1)*2; int s=0; for( int t=1;t<k;t++ ) { int l=N-(t-1)*2, w=M-(t-1)*2; s+=(l-1)*2+(w-1)*2; } s++; if(l==1) s+=j-k; else if(w==1) s+=i-k; else { if(i==k) s+=j-k; else if(j==k+w-1) s+=w-1+i-k; else if(i==k+l-1) s+=w-1+l-1+k+w-1-j; else s+=w-1+l-1+w-1+k+l-1-i; } return s; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:【C++】输入多行数字到数组
下一篇:C++11 之 并发编程 (一)
- 浅谈LCA 2019-12-25
- 螺旋折线-C++ 2019-11-27
- Matrix Cells in Distance Order 2019-08-16
- POJ3233Matrix Power Series(矩阵快速幂) 2018-09-29
- BZOJ4128: Matrix(BSGS 矩阵乘法) 2018-07-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash