• 蛇形矩阵


    (一)蛇形矩阵
    在n*n的方阵里面填入1,2,3,......,n*n,要求填成蛇形。
    例如n=4时方阵如下:
     10  11  12   1
      9  16  13   2
      8  15  14   3
      7   6   5   4
    上面的方阵中,多余的空格只是为了便于观察,不必严格输出。
    题目中输入的n<=100.

     1 #include <stdio.h>
     2 #define maxN 100
     3 int main(int argc, char *argv[])
     4 {
     5     int a[maxN][maxN]={0},i,j,t;
     6     int n;
     7     int end;
     8     scanf("%d",&n);
     9     t=1;
    10     i=0;
    11     j=n-1;
    12     a[i][j]=t;
    13     
    14     t=2;
    15     end=n*n;
    16     while(t<end)
    17     {
    18         while( i+1<n  && a[i+1][j]==0 ) { i++; a[i][j]=t; t++;}
    19         while( j-1>=0 && a[i][j-1]==0 ) { j--; a[i][j]=t; t++;}
    20         while( i-1>=0 && a[i-1][j]==0 ) { i--; a[i][j]=t; t++;}
    21         while( j+1<n  && a[i][j+1]==0 ) { j++; a[i][j]=t; t++;}
    22     }
    23     for(i=0;i<n;i++)
    24     {
    25         for(j=0;j<n;j++)
    26             printf("%3d ",a[i][j]);
    27         printf("
    ");
    28     }
    29     return 0;
    30 }

    (二)蛇形矩阵

    http://blog.163.com/lvan100@yeah/blog/static/6811721420107176921749

    题目描述:

    打印出如下格式的数据:

    解题思路:
    如果我们将矩阵变一下形状,如下:

    这样就变成输出一个三角阵了,简单多了。只是呢,需要在某些行上做一些逆序变换。
    奇数时变换奇数行; 偶数时变换偶数行
    最后按照斜线将数填入原来矩阵中,OK!
     1 #include <stdio.h>
     2 int main()
     3 {
     4     int n;
     5     int num=0;
     6     int a[100][100]={0};
     7     int b[200][100]={0};//输入输出矩阵的大小,不超过100,当然自己可以修改上限值。
     8     int i,j;
     9     int temp;
    10     
    11     scanf("%d",&n);
    12     //构造三角阵数形的上半部分 
    13     for(i=0;i<n-1;i++)
    14     {
    15         for(j=0;j<=i;j++)
    16         {
    17             num++;
    18             b[i][j]=num;
    19         }
    20     }
    21     //够造三角形的下半部分 
    22     for(i=n-1;i<2*n-1;i++)
    23     {
    24         for(j=0;j<2*n-1-i;j++)
    25         {
    26             num++;
    27             b[i][j]=num;
    28         }
    29     }
    30 
    31     //某些行数据逆序
    32     for(i=0;i<n;i+=2)
    33     {
    34         temp=0;
    35         for(j=0;j<=i/2;j++)
    36         {
    37             temp=b[i][j];
    38             b[i][j]=b[i][i-j];
    39             b[i][i-j]=temp;
    40         }
    41     }
    42     for(i=(n+1)/2*2;i<2*n-1;i+=2)
    43     {
    44         temp=0;
    45         for(j=0;j<(2*n-1-i)/2;j++)
    46         {
    47             temp=b[i][j];
    48             b[i][j]=b[i][2*n-2-i-j];
    49             b[i][2*n-2-i-j]=temp;
    50         }
    51     }
    52 
    53     //按照斜线将数填回原矩阵
    54     for(i=0;i<n;i++)
    55     {
    56         for(j=0;j<=i;j++)
    57         {
    58             a[i-j][j]=b[i][j];
    59         }
    60     }
    61     for(i=n;i<2*n-1;i++)
    62     {
    63         for(j=i-n+1;j<n;j++)
    64         {
    65             a[i-j][j]=b[i][j-i+n-1];
    66         }
    67     }
    68 
    69     //输出矩阵
    70     for(i=0;i<n;i++)
    71     {
    72         for(j=0;j<n;j++)
    73             printf("%d  ",a[i][j]);
    74         printf("
    ");
    75     }
    76     return 0;
    77 }
    View Code

    (三)螺旋矩阵

    http://www.cnblogs.com/huashanqingzhu/p/4098564.html

  • 相关阅读:
    构造 BestCoder Round #52 (div.2) 1001 Victor and Machine
    multiset || 线段树 HDOJ 4302 Holedox Eating
    BFS(最短路) HDOJ 4308 Saving Princess claire_
    组合数专题
    余数专题
    数论 HDOJ 5407 CRB and Candies
    异或+构造 HDOJ 5416 CRB and Tree
    构造 HDOJ 5414 CRB and String
    背包DP HDOJ 5410 CRB and His Birthday
    博客贴自定义高亮代码
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/5019922.html
Copyright © 2020-2023  润新知