zoukankan      html  css  js  c++  java
  • AcWing 756.蛇形矩阵

    AcWing 756.蛇形矩阵

    题目描述

    输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。

    具体矩阵形式可参考样例。

    输入格式

    输入共一行,包含两个整数n和m。

    输出格式

    输出满足要求的矩阵。

    矩阵占n行,每行包含m个空格隔开的整数。

    数据范围

    1≤n,m≤100

    输入样例

    3 3
    

    输出样例

    1 2 3
    8 9 4
    7 6 5
    

    题目思路

    写法一:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    const int N = 1e2+10;
    int a[N][N];
    
    int main()
    {
        int sum,n,m,flag = 1,x=0,y=0;
        cin >> n >> m;
        sum = n*m;
        for(int i=1;i<=sum;i++)
        {
            switch(flag)
            {
                case 1:
                    a[x][y++] = i;
                    if(y==m||a[x][y])
                    {
                        flag = 2;
                        x++,y--;
                    }
                break;
                case 2:
                    a[x++][y] = i;
                    if(x==n||a[x][y])
                    {
                        flag = 3;
                        x--,y--;
                    }
                break;
                case 3:
                    a[x][y--] = i;
                    if(y==-1||a[x][y])
                    {
                        flag = 4;
                        x--,y++;
                    }
                break;
                case 4:
                    a[x--][y] = i;
                    if(x==-1||a[x][y])
                    {
                        flag = 1;
                        x++,y++;
                    }
                break;
            }
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
                cout << a[i][j] << " ";
            puts("");
        }
        return 0;
    }
    

    写法二:

    #include <iostream>
    
    using namespace std;
    
    const int N = 110;
    
    int n, m;
    int q[N][N];
    
    int main()
    {
        cin >> n >> m;
        int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
        int x = 0, y = 0, d = 1;
        for (int i = 1; i <= n * m; i ++ )
        {
            q[x][y] = i;
            int a = x + dx[d], b = y + dy[d];
            if (a < 0 || a >= n || b < 0 || b >= m || q[a][b])
            {
                d = (d + 1) % 4;
                a = x + dx[d], b = y + dy[d];
            }
            x = a, y = b;
        }
    
        for (int i = 0; i < n; i ++ )
        {
            for (int j = 0; j < m; j ++ )
                cout << q[i][j] << ' ';
            cout << endl;
        }
    
        return 0;
    }
    
  • 相关阅读:
    二分法查找数据
    循环队列的操作
    堆栈的操作
    链表的各种操作
    尾插法创建链表
    头插法创建链表
    链表简介
    <map>的常用操作
    linux下php添加自带扩展
    快速排序
  • 原文地址:https://www.cnblogs.com/fsh001/p/14279361.html
Copyright © 2011-2022 走看看