zoukankan      html  css  js  c++  java
  • 螺旋矩阵(递归问题)

    题目描述:

    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 的矩阵,同一行内相邻整数之间用一个 ' ' 隔开。每组数据结尾额外输出一行空行。

    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
    ", p[i][j]);
    20                 else printf("%d	", p[i][j]);
    21             }
    22         }
    23         printf("
    ");
    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 }
    有些目标看似很遥远,但只要付出足够多的努力,这一切总有可能实现!
  • 相关阅读:
    Jmeter非GUI、GUI模式压测生成测试报告
    测试轮播banner
    Jmeter如何监控服务器CPU、内存、i/o等资源
    java基础(三)
    用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)
    L2-011. 玩转二叉树
    L2-010. 排座位
    L2-008. 最长对称子串
    L2-009. 抢红包
    L2-006. 树的遍历
  • 原文地址:https://www.cnblogs.com/Bravewtz/p/10325780.html
Copyright © 2011-2022 走看看