一道螺旋矩阵的C语言题!

问题描述:

一道螺旋矩阵的C语言题!
请打印出螺旋方阵.如4*4的矩阵效果是:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
矩阵的维度n,也就是矩阵的边长,如上例中n=4..输出结果为一个4*4的矩阵.
n的范围小于100.
1个回答 分类:综合 2014-11-07

问题解答:

我来补答
#include <stdio.h>
//基本思想是将所有数按照螺旋顺序存入2维数组,再输出
int main()
{
\x09int n,u,d,l,r,i,j, mat[100][100] = {0}; //定义各个变量,其中u,d,l,r为存入数组时的上下左右边界.
\x09scanf("%d",&n);\x09//输入n的值
\x09for (i = 1; i<=n ; i++)\x09//先存数组第一行,i为数组里存入的数,在程序中一直递增
\x09{
\x09\x09mat[0][i-1] = i;
\x09}
\x09u = 1; d = n -1 ; l = 0 ; r = n -1;\x09//初始化螺旋的上下左右边界,因为存入了第一行,所以u = 1
\x09while(1)\x09//此循环实现螺旋顺序存入数据
\x09{
\x09\x09for (j = u; j <= d ; j++,i++)\x09//由上到下存入最右边的一列数
\x09\x09{
\x09\x09\x09mat[j][r] = i;
\x09\x09}
\x09\x09
\x09\x09r--;\x09//右边界减一
\x09\x09for (j = r ; j >= l ; j--,i++)\x09//由右到左存入最下边的一行数
\x09\x09{
\x09\x09\x09mat[d][j] = i;
\x09\x09}
\x09\x09d--;//下边界减一
\x09\x09if (i >= (n*n)) break;\x09//判断是否存满,存满跳出
\x09\x09for (j = d ; j >= u ; j--,i++)\x09//由下到上存入最左边的一列数
\x09\x09{
\x09\x09\x09mat[j][l] = i;
\x09\x09}
\x09\x09l++;//左边界加一
\x09\x09for (j = l ; j <= r ; j++,i++)\x09//由左到右存入上边的一行数
\x09\x09{
\x09\x09\x09mat[u][j] = i;
\x09\x09}
\x09\x09u++;//上边界加一
\x09\x09if (i >= (n*n)) break;  //判断是否存满,存满跳出
\x09}
\x09for (i = 0 ; i < n ; i++)
\x09{
\x09\x09for( j = 0 ; j < n ; j++)
\x09\x09{
\x09\x09\x09printf("%d\t", mat[i][j]);
\x09\x09}
\x09\x09printf("\n");
\x09}
}

再问: while(1)是什么意思?不好意思,我是初学者。 另外,底下的for循环是干嘛的?\t又是什么?
再答: while(1)就是一直循环的意思,如果没有break语句就是个死循环 最后最后的那两个for循环是用来输出数组的啊~\t是制表符,用来让输出的矩阵比较整齐,就像图里面的。
 
 
展开全文阅读
剩余:2000
下一页:填词谢谢