C語言 順時針列印矩陣(二維陣列)

2021-10-10 14:20:31 字數 2449 閱讀 9742

給出二維陣列,要求按順時針列印二維陣列。

例如給出

輸入 int arr[3]

輸出 [1,2,3,6,9,8,7,4,5]

順時針列印矩陣的順序是 「從左向右、從上向下、從右向左、從下向上」 迴圈。

1、求出用於返回列表的大小returnsize。

2、矩陣 左、右、上、下 四個邊界 l , r , t , b ,用於列印的結果列表 val 。

3、「從左向右、從上向下、從右向左、從下向上」 四個方向迴圈,每個方向列印中做以下三件事 (各方向的具體資訊見下表) ;

3.1根據邊界列印,即將元素按順序新增至列表 val 尾部;

3.2邊界向內收縮 1(代表已被列印);

3.3判斷是否列印完畢(邊界是否相遇),若列印完畢則跳出。

4、返回val

;//下面要走的是從上到下,所以先判斷上邊界+1是否比下邊界大,如果大說明已經列印完全。

// top to bottom.

for(

int i = t; i <= b; i++

)//從上到下,i就等於上,i<=下

if(l >

--r)

break

;//下面要走的是從右到左,所以先判斷左邊界是否比右邊界-1大,如果大說明已經列印完全。

// right to left.

for(

int i = r; i >= l; i--

)//從右到左,i就等於右,i>=左

if(t >

--b)

break

;//下面要走的是從下到上,所以先判斷上邊界是否比下邊界-1大,如果大說明已經列印完全。

// bottom to top.

for(

int i = b; i >= t; i--

)//從下到上,i就等於下,i>=上if(

++l > r)

break

;//下面要走的是從左到右,所以先判斷左邊界+1是否比右邊界大,如果大說明已經列印完全。

}return val;

}int

main()

;//用於接收val的列表的長度

int returnsize;

//定義arr2用來接收val的首位址

int*arr2 =

spiralorder

(arr,

&returnsize)

;//列印列表val

for(

int i =

0; i < returnsize; i++

)printf

("\n");

return0;

}執行結果

如果想列印3行4列或者其他多行多列,只要將一開始巨集定義的low 和 col數值一改,再將陣列的值填好,就可以了。

下面附上逆時針列印陣列的**,跟順時針列印的原理一模一樣。

#define low 3

#define col 3

intmain()

;int l =

0, r = col -

1, t =

0, b = low -1;

l =0, r = col -

1, t =

0, b = low -1;

printf

("逆時針列印二維陣列 ");

while(1

)if(++l > r)

break

;for

(int i = l; i <= r; i++)if

(t >

--b)

break

;for

(int i = b; i >= t; i--)if

(l >

--r)

break

;for

(int i = r; i >= l; i--)if

(++t > b)

break;}

return0;

}

順時針列印二維陣列

如果看不懂,可參照劍指offer128頁 include include using namespace std 方法一 傳vector 需要傳引用 方法二 傳二維指標 按圈給陣列賦值 void printmatrixincircle int vector numbers,int rows,int ...

順時針列印二維陣列

一 題目 要求 輸入乙個陣列,從外到裡順時針列印陣列中的元素,例如輸入矩陣 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11,10,9,5,6,7 二 思路 按圈列印,記錄每圈的起始位置 行號 列號 特殊行或列需要判斷防止出現空指標異常。三 public c...

順時針螺旋列印二維陣列

想起來一道做過兩次的競賽題,明明之後重寫了標程第二次還是想不起來怎麼寫了,愣是連續兩次打表過 捂臉 題目 1,2,3 n n 的數字按照順時針螺旋的形式列印成矩陣,如下 輸入數字2,則程式輸出 1 24 3 輸入數字3,則程式輸出 1 2 3 8 9 4 7 6 5 輸入數字4,則程式輸出 1 2 ...