序列螺旋矩阵

题目描述:

Problem Description

bLue 有一个长度为 n*n 的序列,现在他想把这个序列填到一个 n*n 的螺旋矩阵中,你能帮助他吗?

Input

输入数据有多组(数据组数不超过 20),到 EOF 结束。

对于每组数据:

  • 第 1 行输入 1 个奇数 n (1 <= n <= 9, n%2 = 1)
  • 第 2 行输入 n*n 个用空格隔开的整数(范围 [0, 100]),表示初始序列

Output

对于每组数据,输出一个 n*n 的矩阵,同一行内相邻整数之间用一个 ‘\t‘ 隔开。每组数据结尾额外输出一行空行。

Sample Input

3
1 2 3 4 5 6 7 8 9
5
5 3 2 4 8 7 1 6 9 10 11 12 13 14 15 16 17 18 19 20 21 25 27 29 33

Sample Output

7	8	9
6	1	2
5	4	3

21	25	27	29	33
20	1	6	9	10
19	7	5	3	11
18	8	4	2	12
17	16	15	14	13
 1 #include <stdio.h>
 2 #include <string.h>
 3 int i, a[125], p[12][12];/*数组a存放数据,数组p建立螺旋矩阵*/
 4 void Creat(int n, int left, int right);/*螺旋递归矩阵建立*/
 5 int main()
 6 {
 7     int n;
 8     while(scanf("%d", &n) != EOF){
 9         memset(a, 0, sizeof(a));
10         memset(p, 0, sizeof(p));
11         for(i = 1; i <= n * n; i++)
12             scanf("%d", &a[i]);
13         i = 0;
14         int j;
15         Creat(n, n / 2 + 1, n / 2 + 1);
16         for(i = 1; i <= n; i++){
17             for(j = 1; j <= n; j++){
18                 if(j == n)
19                     printf("%d\n", p[i][j]);
20                 else printf("%d\t", p[i][j]);
21             }
22         }
23         printf("\n");
24     }
25     return 0;
26 }
27 void Creat(int n, int left, int right)
28 {
29     int k;
30     if(left == right)
31         p[left][right] = a[++i];
32     else{
33         for(k = left; k <= right; k++)
34             p[k][right] = a[++i];
35         for(k = right - 1; k >=  left - 1; k--)
36             p[right][k] = a[++i];
37         for(k = right - 1; k >= left - 1; k--)
38             p[k][left - 1] = a[++i];
39         for(k = left; k <= right; k++)
40             p[left - 1][k] = a[++i];
41     }
42     if(left == right)  /*第一圈起始位置的情况*/
43         Creat(n, left, right + 1);
44     else if(right < n)  /*递归边界*/
45         Creat(n, left - 1, right + 1);  //右上角
46 }

原文地址:https://www.cnblogs.com/Bravewtz/p/10325898.html

时间: 2024-08-10 08:21:01

序列螺旋矩阵的相关文章

螺旋矩阵(递归问题)

题目描述: Problem Description bLue 有一个长度为 n*n 的序列,现在他想把这个序列填到一个 n*n 的螺旋矩阵中,你能帮助他吗? Input 输入数据有多组(数据组数不超过 20),到 EOF 结束. 对于每组数据: 第 1 行输入 1 个奇数 n (1 <= n <= 9, n%2 = 1) 第 2 行输入 n*n 个用空格隔开的整数(范围 [0, 100]),表示初始序列 Output 对于每组数据,输出一个 n*n 的矩阵,同一行内相邻整数之间用一个 '\t'

2014螺旋矩阵

题目描述 Description 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序,在格子中 依次填入 1, 2, 3, ... , n2,便构成了一个螺旋矩阵. 下图是一个 n = 4 时的螺旋矩阵. 1  2  3  4 12  13  14  5 11  16  15  6 10  9  8  7 现给出矩阵大小 n 以及 i 和

每日算法之四十一:Spiral Matrix II (螺旋矩阵)

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example, Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 针对这个问题采用最直观的方式即可,即螺旋插入,这里有两个地方需要注意,一个是插入边界的界定,

1050. 螺旋矩阵(25)

本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m-n取所有可能值中的最小值. 输入格式: 输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数.所有数字不超过104,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行n个数字,共m行.相邻数字以1个空格分隔,行末不得有多余空格. 输入样例: 12 37 76 20 98 76 42 53 95

leetcode-Spiral Matrix II 螺旋矩阵2之python大法好,四行就搞定,你敢信?

Spiral Matrix II 螺旋矩阵 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example,Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 真的不容易..看博客园有人面试碰到过这个问题,长篇

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

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

当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