螺旋填数

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

一天,小明在研究蜗牛的壳时,对其螺旋状的花纹感到十分有趣。于是他回到了家中,画出了一个螺旋花纹,但是他对这样的图案并不满意,他想要得到一个螺旋的n * n矩阵,于是他以1开始,顺时针螺旋地在螺旋花纹中填入一个数,保证这个数比上一个数大1,一直按照规则填直到填出一个n * n的矩阵为止。于是小明根据螺纹做出了以下的规则:螺旋填数由1开始,开始填入方向为右,然后向下,再向左,再向上填,循环此过程直到填出一个n * n的矩阵。

Input:

输入包含多组测试数据,每组测试数据输入一个整数n(1 ≤ n ≤ 50)

Output:

对于每组测试数据,输出满足上述规则的n * n的矩阵

Sample Input:

5

Sample Output:

21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
解题思路:简单找规律,如图所示。cnt初始值为1,每沿着两个方向填完cnt个数后,cnt++;注意每个循环要控制到m<=n*n;否则会覆盖原来的数据导致输出错误,还有要注意越界的情况。

AC代码:
 #include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,y,s[][],m,cnt,num;
while(cin>>n){
if(n%)x=y=(n+)/;
else x=y=n/;
m=;s[x][y]=m++;cnt=;
while(m<=n*n){
num=;
while(y<=n&&num<=cnt&&m<=n*n){if(y+<=n)s[x][++y]=m++;num++;}
num=;
while(x<=n&&num<=cnt&&m<=n*n){if(x+<=n)s[++x][y]=m++;num++;}
num=;cnt++;
while(y>=&&num<=cnt&&m<=n*n){if(y->)s[x][--y]=m++;num++;}
num=;
while(x>=&&num<=cnt&&m<=n*n){if(x->)s[--x][y]=m++;num++;}
cnt++;
}
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
cout<<s[i][j]<<(j==n?"\n":" ");
}
return ;
}

最新文章

  1. ApiAuthValue鉴权机制总结
  2. Linux上进行单片机开发
  3. 黑马程序员-循环引用问题和weak
  4. HomeKit 与老旧设备
  5. 1.6---旋转二维数组,旋转图像像素,旋转矩阵,90度(CC150)
  6. java常见类型的转化以及风险
  7. Apache设置禁止访问网站目录(目录列表显示文件)
  8. 算法总结—深度优先搜索DFS
  9. js即时监听文本内容
  10. VFS对象总结
  11. web2.0的几个开源项目
  12. ExtJS 饼状图报表
  13. Effective Java2读书笔记-创建和销毁对象(四)
  14. PHP 9 大缓存技术总结
  15. 【java】静态方法声明与调用习题
  16. Aspose.Words关于域的应用
  17. javascript第六章--BOM
  18. MySQL添加用户并授权
  19. 使用JSDoc自动生成代码文档
  20. CentOS “/lib64/libc.so.6: version `GLIBC_2.14′ not found”系统glibc版本太低

热门文章

  1. 云计算时代,你为什么一定要学Linux?
  2. Oracle,sqlserver,mySQl的区别和联系:
  3. swift 再识枚举变量
  4. EasyUI, Dialog 在框架页(ifrmae)的Top页面弹出时,拖拽Dialog边缘(以改变窗口大小),UI界面被卡死的解决办法
  5. POJ3984——迷宫问题
  6. Capture the Flag ZOJ - 3879(模拟题)
  7. [HDU] 4507 恨7不成妻
  8. isinstance、issubclass、反射
  9. Eclipse中使用struts标签时出错
  10. Element &#39;dependencies&#39; cannot have character[children],because the type&#39;s content type is elemen