程序要求
程序描述:
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
程序实现
这个编程题大家可能都做过,算是比较经典的算法编程题了,当然也有很多的实现方法,这里我讲一种。
我们先分析下,这个题目主要是输出数字螺旋,我们可以看成是四个方向:
1,左-->右
2,上-->下
3,右-->左
4,下-->上
而且这四个方向的数字是依次递增的,那我们可以这样思考,整个输出是一个二维数组,行和列数是一样的,比如输入4,那1-12就是第一圈,12-16就是第二圈,每一圈又分四个方向。
我们可以先这样定义:
1 int num[80][80]; 2 int i,j; 3 int rows,quan;
num数组表示的是输出的数组,rows就是行列数,也就是我们输入的值,quan表示的是螺旋的圈数,i表示的是螺旋上的数字,j等下我们程序中讲,我们代码可以这样写:
1 scanf("%d",&rows); 2 quan=0; 3 for(i=1;i<=rows*rows;quan++) 4 { 5 if(i==rows*rows) 6 num[(rows-1)/2][(rows-1)/2]=i++; 7 else 8 { 9 for(j=quan;j<rows-1-quan;j++) 10 num[quan][j]=i++; 11 for(j=quan;j<rows-1-quan;j++) 12 num[j][rows-quan-1]=i++; 13 for(j=rows-1-quan;j>quan;j--) 14 num[rows-quan-1][j]=i++; 15 for(j=rows-1-quan;j>quan;j--) 16 num[j][quan]=i++; 17 } 18 }
最外层的for是循环圈数的意思,里面if是判断最后一圈是不是单独的数字,就像行数如果是3,那最后一圈就只要一个数字9,下面四个for就是代表的上面说的四个方向。大家看下代码就懂得,这里我就不多说了。
大家可能有更好的实现方式,希望可以多多交流,
完整程序代码:
运行结果:
本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3398799.html,如需转载请自行联系原作者