打印螺旋矩阵

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<math.h>
 4
 5 #define MAX 64
 6
 7 void initArray(int array[][MAX], int n);
 8 void printArray(int array[][MAX], int n);
 9
10 int main()
11 {
12     int n;
13     int array[MAX][MAX];
14     printf("Input n:\n");
15     scanf_s("%d",&n);
16     initArray(array,n);
17     printArray(array,n);
18     system("pause");
19     return 0;
20 }
21
22 void initArray(int array[][MAX], int n)
23 {
24     int cnt = 1;//记录要打印的数
25     int i,j;//行列下标
26     int step;//打印数组一个方向上的数的下标
27     int step_cnt = 1;//打印数组一个方向上的数的个数
28
29     i = n>>1;
30     j = n>>1;
31
32     array[i][j] = 1;//将最中间元素置1
33
34     while(cnt <= n*n)//cnt <= pow((float)n,2)
35     {
36         //从下往上
37         for(step = 0; step < step_cnt; step++, i--)
38             array[i-1][j] = ++cnt;
39         if(cnt > n*n)
40             break;
41
42         //从右往左
43         for(step = 0; step < step_cnt; step++,j--)
44             array[i][j-1] = ++cnt;
45         if(cnt > n*n)
46             break;
47
48         step_cnt++;
49
50         //从上往下
51         for(step = 0; step < step_cnt; step++,i++)
52             array[i+1][j] = ++cnt;
53         if(cnt > n*n)
54             break;
55
56         //从左往右
57         for(step = 0; step < step_cnt; step++,j++)
58             array[i][j+1] = ++cnt;
59
60         step_cnt++;
61     }
62 }
63
64 void printArray(int array[][MAX], int n)
65 {
66     int i, j;
67     for(i = 0; i < n; i++)
68     {
69         for(j = 0; j < n; j++)
70             printf("%3d",array[i][j]);
71         printf("\n");
72     }
73 }

时间: 2024-10-14 17:11:41

打印螺旋矩阵的相关文章

C版——打印螺旋矩阵

1.递归解法 递归解法如下: +--------------------------> X 轴 | 1   2   3   4 |  12 13 14 5 |  11 16 15 6 |  10 9   8   7 | Y轴 设元素1的坐标为(0,0),元素13的坐标为(1,1),--,任一元素的坐标为(x,y) 1 #include <stdio.h> 2 3 void SetMatrix(int **matrix, int x, int y, int start, int n) {

剑指offer (20) 打印螺旋矩阵

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> result; int nRows = matrix.size(); if (nRows == 0) return result; int nCols = matrix.at(0).size()

打印螺旋矩阵数字

明确了方阵数字是螺旋递增以后,发现每一个"口"字型的一圈数字正好闭合且连续递增.所以解题思路是由"口"字型的 递增依次向内嵌套.先填充最外层"口"字型的一圈数字,接着填充次外层--最后填充最内层的四个数.由一些较简单的画图可以 看出,层数的奇偶会影响到最内层的填充.当为奇数时,最内层只剩一个数字需要填充.所以奇数层需要单独考虑. 先是填充顶部的(n-1)个数字,接着由顶部的最后一个数字开始向下,填充右部的(n-1)个数字,接着是底部的(n-1)个

编程题之打印二维螺旋矩阵

当size=4时, 二维螺旋矩阵如下图所示: 规律总结 可以把这个二维矩阵看成一层套一层,如上图所示,1->4->7->10->12为第零层, 13->14->15->16为第一层,所以当size=4时,总共有两层.规律如下: 可分层数为:若size为偶数,层数=size/2, 若为奇数,则层数=(size+1)/2; 第n层一个方向上的数字的数量为:size-2*n; 这是因为第零层的一个方向上数字的数量就是size, 而第一层是size-2,...第n层就是s

Java-基础编程(螺旋矩阵&amp;乘法表)

package cn.rick.study; import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner; /** * * @author Rick-bao date 2014-8-29 * */public class SomeBasicCode { public static void main(String[] args) { MultiplicationTable();//

HLG 1564 螺旋矩阵 (趣味C语言)

链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1564 Description 对于给定的一个数n,要你打印n*n的螺旋矩阵. 比如n=3时,输出: 1 2 3 8 9 4 7 6 5 Input 多组测试数据,每个测试数据包含一个整数n(1<=n<=32) Output 对于每组测试数据,输出一个n*n的螺旋矩阵,定义在题目描述里. 在一组测试数据中,每个数占的字符宽度

从外向内扩的螺旋矩阵

形如: 1   2   3   4  5 16 17 18 19  6 15 24 25 20  7 14 23 22 21  8 13 12 11 10  9 如果我们需要打印这样从外部向内扩展的n * n矩阵. 分析: 可以把矩阵分为n/2个圈, (上面的例子分了两个圈,最外面的圈就是12345~16,另外一个圈就是17~24) 我们只需要以圈为单位,给二维数组中的每个数赋值.赋值的顺序也是按照数字的递增顺序(顺时针) Java代码如下: public class SpiralMatrix

PHP实现螺旋矩阵(螺旋数组)

今天碰到一个比较有意思的问题, 就是把A到Y这25个字母以下面的形式输出出来 A B C D E P Q R S F O X Y T G N W V U H M L K J I 问题很有意思,就是转圈圈把字母填到表格中,要输出这样的格式,其实就需要构造一个下面这样的表格 1 2 3 4 5 16 17 18 18 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 这其实是一个螺旋矩阵的问题, 这跟下面这个问题本质是一样的: 给定一个行数row和列数cols,

代码题(37)— 螺旋矩阵

1.54. 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,12,11,10,9,5,6,7]    思想:用左上和右下的坐标定位出一次要旋