Python蛇形方阵的实现

作者:机器学习Zero 时间:2023-06-27 16:33:21 

输入:数字m mm,n nn

输出:m mm行n nn列的数字蛇形方阵

1. 从方阵最左上角开始,顺时针向内填充。

初始化一个m mm行n nn列的矩阵matrix,所有元素都为0;然后从第一个位置开始,按顺序填充数字,填满了一列或一行后,就转向填写下一列或下一行,最后打印出这个数字蛇形方阵。代码如下:

def print_snake_matrix(m, n):
   matrix = [[0]*n for i in range(m)]
   num = 1
   i, j = 0, 0
   while num <= m*n:
       while j < n and matrix[i][j] == 0:
           matrix[i][j] = num
           num += 1
           j += 1
       j -= 1
       i += 1
       while i < m and matrix[i][j] == 0:
           matrix[i][j] = num
           num += 1
           i += 1
       i -= 1
       j -= 1
       while j >= 0 and matrix[i][j] == 0:
           matrix[i][j] = num
           num += 1
           j -= 1
       j += 1
       i -= 1
       while i >= 0 and matrix[i][j] == 0:
           matrix[i][j] = num
           num += 1
           i -= 1
       i += 1
       j += 1
   for row in matrix:
       for num in row:
           print(num, end='\t')
       print()

执行

print_snake_matrix(4, 6)

输出

1 2 3 4 5 6
16 17 18 19 20 7
15 24 23 22 21 8
14 13 12 11 10 9

c++实现

#include <iostream>
#include <vector>
using namespace std;
void print_snake_matrix(int m, int n) {
    vector<vector<int>> matrix(m, vector<int>(n, 0));
    int num = 1;
    int i = 0, j = 0;
    while (num <= m * n) {
        while (j < n && matrix[i][j] == 0) {
            matrix[i][j] = num;
            num++;
            j++;
        }
        j--;
        i++;
        while (i < m && matrix[i][j] == 0) {
            matrix[i][j] = num;
            num++;
            i++;
        }
        i--;
        j--;
        while (j >= 0 && matrix[i][j] == 0) {
            matrix[i][j] = num;
            num++;
            j--;
        }
        j++;
        i--;
        while (i >= 0 && matrix[i][j] == 0) {
            matrix[i][j] = num;
            num++;
            i--;
        }
        i++;
        j++;
    }
    for (auto row : matrix) {
        for (int num : row) {
            cout << num << "\t";
        }
        cout << endl;
    }
}

2. 从方阵最右上角开始,逆时针向内填充。

由于是从右上角开始填充,所以初始位置为第0 00行第n &minus; 1 n-1n&minus;1列。随后的填充顺序也需要逆时针旋转,以保证填充的数字顺序正确。除此之外,这段代码的实现与前面的代码基本相同,都是采用四个while循环来按顺序填充数字。代码如下:

def print_snake_matrix(m, n):
   matrix = [[0]*n for i in range(m)]
   num = 1
   i, j = 0, n-1
   while num <= m*n:
       while j >= 0 and matrix[i][j] == 0:
           matrix[i][j] = num
           num += 1
           j -= 1
       j += 1
       i += 1
       while i < m and matrix[i][j] == 0:
           matrix[i][j] = num
           num += 1
           i += 1
       i -= 1
       j += 1
       while j < n and matrix[i][j] == 0:
           matrix[i][j] = num
           num += 1
           j += 1
       j -= 1
       i -= 1
       while i >= 0 and matrix[i][j] == 0:
           matrix[i][j] = num
           num += 1
           i -= 1
       i += 1
       j -= 1
   for row in matrix:
       for num in row:
           print(num, end='\t')
       print()

执行

print_snake_matrix(4, 6)

输出

6 5 4 3 2 1
7 20 19 18 17 16
8 21 22 23 24 15
9 10 11 12 13 14

c++实现

void print_snake_matrix(int m, int n) {
    vector<vector<int>> matrix(m, vector<int>(n, 0));
    int num = 1;
    int i = 0, j = n - 1;
    while (num <= m * n) {
        while (j >= 0 && matrix[i][j] == 0) {
            matrix[i][j] = num;
            num++;
            j--;
        }
        j++;
        i++;
        while (i < m && matrix[i][j] == 0) {
            matrix[i][j] = num;
            num++;
            i++;
        }
        i--;
        j++;
        while (j < n && matrix[i][j] == 0) {
            matrix[i][j] = num;
            num++;
            j++;
        }
        j--;
        i--;
        while (i >= 0 && matrix[i][j] == 0) {
            matrix[i][j] = num;
            num++;
            i--;
        }
        i++;
        j--;
    }
    for (auto row : matrix) {
        for (int num : row) {
            cout << num << "\t";
        }
        cout << endl;
    }
}

来源:https://blog.csdn.net/apr15/article/details/130629500

标签:Python,蛇形方阵
0
投稿

猜你喜欢

  • Python实现简单的语音识别系统

    2022-09-11 04:44:15
  • 使用SQL语句去掉重复的记录【两种方法】

    2024-01-18 16:55:59
  • Python的OptionParser模块示例教程

    2023-01-03 05:21:03
  • Python Decorator的设计模式演绎过程解析

    2021-10-13 14:29:37
  • 详解Python中dict与set的使用

    2022-09-11 05:22:22
  • Access与Flash的结合应用

    2008-11-20 16:44:00
  • Python类中self参数用法详解

    2023-06-19 00:40:54
  • Python的argparse库使用详解

    2023-06-13 11:27:36
  • Python Xml文件添加字节属性的方法

    2023-08-27 03:48:31
  • MySQL派生表联表查询实战过程

    2024-01-18 14:18:28
  • Python函数式编程指南(一):函数式编程概述

    2023-07-08 01:20:25
  • Python 打印自己设计的字体的实例讲解

    2021-04-24 14:45:21
  • SQL Server 2005数据库批量更新解决办法

    2009-04-11 16:12:00
  • Python中dict和set的用法讲解

    2023-12-09 05:20:55
  • FSO遍历文件夹目录及目录下文件asp代码

    2008-10-10 12:54:00
  • 通过源码分析Golang cron的实现原理

    2023-06-15 23:49:24
  • 准备SQL Server 2008透明数据加密

    2009-01-22 14:18:00
  • SQL Server中元数据函数的用法

    2024-01-20 16:26:54
  • vue 面包屑导航组件封装

    2024-04-27 16:09:48
  • asp伪静态情况下实现的utf-8文件缓存实现代码

    2011-02-24 10:49:00
  • asp之家 网络编程 m.aspxhome.com