思维题 Z字形扫描

思维题 Z字形扫描

 

 

 

#include <bits/stdc++.h>

using namespace std;
int a[200][200];
int n;
void scan(int lever,bool even)

{
    int x,y;//确定起点坐标
    x = lever > n ? n : lever;
    y = lever > n ? (lever - n + 1) : 1;
    char c;//选择输出间隔符号
    c = (x == n && y == n) ? '\n' : ' ';
    int times;//限制每层递减/递增次数
    times = lever >= n ? (n - (lever - n)) : lever;
    if(even) swap(x,y);//偶数层时,交换x,y即可得到起点坐标
    for(int i = 0; i < times; i++)//每层对起点坐标作用times次,然后输出对应元素即可
        printf("%d%c",even? a[x++][y--] : a[x--][y++],c);
    return ;
}
int main(){
    cin >> n;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            cin >> a[i][j];
    for(int lever = 1; lever <= 2 * n - 1; lever++)//循环层数
        scan(lever,lever % 2 == 0);
    return 0;
}

 

上一篇:【leetcode】328. Odd Even Linked List


下一篇:【leetcode】922. Sort Array By Parity II