• 蛇形填数和蛇形取数(基础模拟练习)


     1 /*
     2 问题 输入矩阵的规模n,先将数按照下,右,上,左的顺序填入矩阵,再按照这样的顺序取出。
     3 解题思路 模拟,按照笔的顺序存入取出,注意初始化的时候一定将矩阵全部初始化。 
     4 */ 
     5 #include<cstdio>
     6 #include<cstring>
     7 const int N=1001;
     8 int a[N][N],b[N][N];
     9 int main()
    10 {
    11     int n,i,j,tot,x,y;
    12     while(scanf("%d",&n) != EOF){
    13         //蛇形填数 
    14         x=0;
    15         y=0;
    16         tot=0;
    17         memset(a,0,sizeof(int)*N*N);//一定要初始化全部,否则出现不可预估的错误 
    18         while(tot < n*n){
    19             while(x < n && !a[x][y]){
    20                 a[x][y] = ++tot;
    21                 x++;
    22             }
    23             
    24             x--;
    25             y++;
    26             while(y < n && !a[x][y]){
    27                 a[x][y]=++tot;
    28                 y++;
    29             }
    30             
    31             y--;
    32             x--;
    33             while(x >= 0 && !a[x][y]){
    34                 a[x][y] = ++tot;
    35                 x--;
    36             }
    37             
    38             x++;
    39             y--;
    40             while(y >= 0 && !a[x][y]){
    41                 a[x][y] = ++tot;
    42                 y--;
    43             }
    44             
    45             y++;
    46             x++;
    47         }
    48         for(i=0;i<n;i++){
    49             for(j=0;j<n;j++){
    50                 printf("%d ",a[i][j]);
    51             }
    52             printf("
    ");
    53         }
    54         //蛇形取数 
    55         x=0;
    56         y=0;
    57         tot=0;
    58         memset(b,0,sizeof(int)*N*N);
    59         while(tot < n*n){
    60             while(x < n && !b[x][y]){
    61                 printf("%d ",a[x][y]);
    62                 b[x][y]=1;
    63                 ++tot;
    64                 x++;
    65             }
    66             x--;
    67             y++;
    68             while(y < n && !b[x][y]){
    69                 printf("%d ",a[x][y]);
    70                 b[x][y]=1;
    71                 ++tot;
    72                 y++;
    73             }
    74             
    75             y--;
    76             x--;
    77             while(x >= 0 && !b[x][y]){
    78                 printf("%d ",a[x][y]);
    79                 b[x][y]=1;
    80                 ++tot;
    81                 x--;
    82             }
    83             
    84             x++;
    85             y--;
    86             while(y >= 0 && !b[x][y]){
    87                 printf("%d ",a[x][y]);
    88                 b[x][y]=1;
    89                 ++tot;
    90                 y--;
    91             }
    92             
    93             y++;
    94             x++;
    95         }
    96         printf("
    ");
    97     }
    98     return 0;
    99 }
  • 相关阅读:
    捕获异常的两种方式Exception
    线程的随机性
    单例模式简单解析--Singleton 单例模式(懒汉方式和饿汉方式)
    LeetCode 116. 填充每个节点的下一个右侧节点指针
    LeetCode 129. 求根到叶子节点数字之和
    LeetCode 124. 二叉树中的最大路径和
    LeetCode 119. 杨辉三角 II
    LeetCode 118. 杨辉三角
    LeetCode 113. 路径总和 II
    LeetCode 114. 二叉树展开为链表
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/8781637.html
Copyright © 2020-2023  润新知