• 打印螺旋状


     初学编程,程序中很多地方都不够完备,望大家见谅。    
     #include <iostream.h>
    #include <iomanip.h>
    #include <stdio.h>
    #define m 20
    #define h(i,j) ((2*c+2-i)*(i-1)/2+j-i+1)  //二维数组中元素在一维数组中的位置
    main()
    { int i=1,j=0,s=0,k,n,c;
      int a[m*(m+1)/2+1];                 
      a=1;
      printf("please input the number\n");
      scanf("%d",&n);
      c=n;
      while(n>0)
       {
        for(k=1;k<=n;k++){j++;a[h(i,j)]=++s;}n--;//横向赋值
        for(k=1;k<=n;k++){i++;a[h(i,j)]=++s;}n--;//纵向赋值
        for(k=1;k<=n;k++){j--;i--;a[h(i,j)]=++s;}n--;//斜向赋值
       }
    k=0;
    for(i=1;i<=c;i++)
    for(j=1;j<=c;j++)
    {
     if(i>j)
     cout<<setw(4)<<"0";
     else
     if(j==c){k++; cout<<setw(4)<<a[k]<<endl; } else {k++;cout<<setw(4)<<a[k];}
     }
    }

     打印螺旋矩阵(递归解法) 

     
    求职过程遇到的一道面试题,当时没有做出来,回来想出几种方法,其中大多是“蛮力”解法,不得不陷入一堆的 ij 循环之中。最后想出一种递归解法,现记录如下。
    题目如下:
    输入N, 打印 N*N 螺旋矩阵
    比如 N = 3,打印:
    1 2 3
    8 9 4
    7 6 5
     
    N = 4,打印:
    1   2   3   4
    12 13 14 5
    11 16 15 6
    10 9   8   7
     
    递归解法如下:
     
    +--------------------------> X 轴
    | 1   2   3   4
    |  12 13 14 5
    |  11 16 15 6
    |  10 9   8   7
    |
    Y轴
     
    设元素1的坐标为(0,0),元素13的坐标为(11),……,任一元素的坐标为(x,y
    以下为完整代码:
    //功能:打印螺旋矩阵
    //参数说明:matrix :螺旋矩阵         (xy) :第一个元素的坐标
    //          start :第一个元素的值     n :矩阵的大小
    void SetMatrix(int **matrix, int x, int y, int start, int n) {
           int i, j;
           if (n <= 0)
                  return;
           if (n == 1) {
                  matrix[x][y] = start;
                  return;
           }
           for (i = x; i < x + n-1; i++)          /* 上部 */
                  matrix[y][i] = start++;
           for (j = y; j < y + n-1; j++)          /* 右边 */
                  matrix[j][x+n-1] = start++;
           for (i = x+n-1; i > x; i--)              /* 底部 */
                  matrix[y+n-1][i] = start++;
           for (j = y+n-1; j > y; j--)              /* 左边 */
                  matrix[j][x] = start++;
           SetMatrix(matrix, x+1, y+1, start, n-2);     /* 递归 */
    }
     
    void main() {
           int i, j;
           int n;
        int **matrix; //螺旋矩阵(二维数组)
          
           scanf("%d", &n);
           matrix = (int **)malloc(n * sizeof(int *)); //为矩阵分配空间
           for (i = 0; i<n; i++)
                  matrix[i] = (int *)malloc(n * sizeof(int));
          
    SetMatrix(matrix, 0, 0, 1, n);
     
           //打印螺旋矩阵
           for(i = 0; i < n; i++) {
                  for (j = 0; j < n; j++)
                         printf("%4d", matrix[i][j]);
           printf("\n");
           }
    }
     
     
     
    运行结果, n = 15 时
     
    1      2        3       4        5       6        7        8       9        10     11      12     13     14   15
    56   57      58     59     60     61      62     63      64     65     66      67     68     69   16
    55   104   105   106   107   108   109   110   111   112   113   114   115   70   17
    54   103   144   145   146   147   148   149   150   151   152   153   116   71   18
    53   102   143   176   177   178   179   180   181   182   183   154   117   72   19
    52   101   142   175   200   201   202   203   204   205   184   155   118   73   20
    51   100   141   174   199   216   217   218   219   206   185   156   119   74   21
    50   99     140   173   198   215   224   225   220   207   186   157   120   75    22
    49   98     139   172   197   214   223   222   221   208   187   158   121   76    23
    48   97     138   171   196   213   212   211   210   209   188   159   122   77    24
    47   96     137   170   195   194   193   192   191   190   189   160   123   78    25
    46   95     136   169   168   167   166   165   164   163   162   161   124   79    26
    45   94     135   134   133   132   131   130   129   128   127   126   125    80   27
    44   93     92     91     90      89     88      87     86      85     84     83      82      81   28
    43   42     41     40     39      38     37      36     35      34     33     32      31      30   29
  • 相关阅读:
    模板
    kuangbin带你飞
    BZOJ开荒记
    模板
    洛谷
    模板
    [蓝桥杯][2013年第四届真题]危险系数
    数位DP入门题
    备战2019蓝桥杯
    常用的数学符号
  • 原文地址:https://www.cnblogs.com/yuanfang/p/1914880.html
Copyright © 2020-2023  润新知