Python蛇形方陣的實(shí)現(xiàn)
輸入:數(shù)字m mm,n nn
輸出:m mm行n nn列的數(shù)字蛇形方陣
1. 從方陣最左上角開始,順時(shí)針向內(nèi)填充。
初始化一個(gè)m mm行n nn列的矩陣matrix,所有元素都為0;然后從第一個(gè)位置開始,按順序填充數(shù)字,填滿了一列或一行后,就轉(zhuǎn)向填寫下一列或下一行,最后打印出這個(gè)數(shù)字蛇形方陣。代碼如下:
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()
執(zhí)行
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++實(shí)現(xiàn)
#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. 從方陣最右上角開始,逆時(shí)針向內(nèi)填充。
由于是從右上角開始填充,所以初始位置為第0 00行第n − 1 n-1n−1列。隨后的填充順序也需要逆時(shí)針旋轉(zhuǎn),以保證填充的數(shù)字順序正確。除此之外,這段代碼的實(shí)現(xiàn)與前面的代碼基本相同,都是采用四個(gè)while循環(huán)來按順序填充數(shù)字。代碼如下:
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()
執(zhí)行
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++實(shí)現(xiàn)
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; ? ? } }
到此這篇關(guān)于Python蛇形方陣的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python蛇形方陣內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 每天如何定時(shí)啟動(dòng)爬蟲任務(wù)(實(shí)現(xiàn)方法分享)
python 每天如何定時(shí)啟動(dòng)爬蟲任務(wù)?今天小編就為大家分享一篇python 實(shí)現(xiàn)每天定時(shí)啟動(dòng)爬蟲任務(wù)的方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python實(shí)現(xiàn)線性搜索算法的示例代碼
線性搜索算法,也稱為順序搜索算法,是一種簡單但常用的搜索技術(shù),在本文中,將深入研究線性搜索算法,并演示如何在?Python?中實(shí)現(xiàn)它,需要的可以參考下2024-02-02跟老齊學(xué)Python之深入變量和引用對(duì)象
本講再次提及變量和引用對(duì)象,就是要讓看官對(duì)變量和賦值有一個(gè)知其然和知其所以然的認(rèn)識(shí)。當(dāng)然,最后能不能達(dá)到此目的,主要看我是不是說的通俗易懂了。如果您沒有明白,就說明我說的還不夠好,可以聯(lián)系我,我再為您效勞。2014-09-09Python辦公自動(dòng)化之自動(dòng)化清理數(shù)據(jù)和自動(dòng)化系統(tǒng)命令詳解
這篇文章主要為大家詳細(xì)介紹了Python辦公自動(dòng)化中自動(dòng)化清理數(shù)據(jù)和自動(dòng)化系統(tǒng)命令的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-01-01django 數(shù)據(jù)庫連接模塊解析及簡單長連接改造方法
今天小編就為大家分享一篇django 數(shù)據(jù)庫連接模塊解析及簡單長連接改造方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python批量添加水印的優(yōu)雅實(shí)現(xiàn)與進(jìn)階
在日常圖像處理中,為圖片添加水印是一項(xiàng)常見任務(wù),有多種方法和工具可供選擇,本文將專注于使用Python語言結(jié)合PIL庫批量添加水印,感興趣的可以了解下2023-12-12python使用tkinter庫實(shí)現(xiàn)五子棋游戲
這篇文章主要為大家詳細(xì)介紹了python使用tkinter庫實(shí)現(xiàn)五子棋游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06