c語言實現螺旋陣列

2021-09-29 11:36:03 字數 1996 閱讀 1620

螺旋陣列

1	2	3	4	5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

分析:這是乙個一維維度和二維維度相等的陣列arr[len][len],將num=1開始從arr[0][0]賦值,直到num=len*len結束賦值。在賦值過程中,如果遇到

下乙個位置超出陣列長度或者已經被賦值,則需要改變方向。

步驟解析:

1.首先定義乙個二維陣列,並將陣列初始化為0(初始化為0方便後面判斷有沒有被賦值)
5

int len =0;

6printf

("請輸入陣列長度:");

7scanf

("%d"

,&len);8

int arr[len]

[len];9

int i =0;

10int j =0;

11for

(;i)

2.對陣列賦值

從arr[0][0]的位置開始賦值,那麼該如何確定轉彎的位置及方向呢?我們可以初始化乙個dir = 0 用dir%4來確定賦值的方向

(0:向右,1:向下,2:向左,3:向上)。可以確定的是賦值是從arr[0][0]的位置開始向右執行,當右邊的位置超出陣列長度或者已經被賦值

(a[i][j]!=0)時,dir++,此時dir=1,dir%4=1,方向變為向下。

1 	i =0;

2 j =0;

3int dir =0;

//確定移動方向 dir%4 == 0向右 1向下 2向左 3向上

4int num =1;

5while

(num<=len*len)

30break

;

上面為向右是的情況,其他三種情況同理。
完整**:

1 #include23

intmain()

15}16 i =0;

17 j =0;

18int dir =0;

//確定移動方向 dir%4 == 0向右 1向下 2向左 3向上

19int num =1;

20while

(num<=len*len)

30break;31

32case1:

//向下

33 i++;34

if(i+

1==len||arr[i+1]

[j]!=0)

37break;38

39case2:

//向左

40 j--;41

if(j-

1<

0||arr[i]

[j-1]!=

0)44break;45

46case3:

//向上

47 i--;48

if(i-

1<

0||arr[i-1]

[j]!=0)

51break;52

}5354}

55for

(i=0

;iprintf

("\n");

60}61printf

("\n");

62return0;

63}

結果演示:

基於c語言實現螺旋矩陣

首先我們要清楚螺旋矩陣的內涵,即所謂 螺旋方陣 是指對任意給定的n,將1到n n的數字從左上角第1個格仔開始,按順時針螺旋方向順序填入n n的方陣裡。最基本的就是定義乙個二維陣列,對其進行向右 向下 向左 向上的依次迴圈。1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 1...

(PAT乙級)1050 螺旋矩陣(C語言實現)

總結 1 兩個會卡住的思路難點 n,m的值怎麼確定。怎麼列印螺旋矩陣。對於 我本來的想法是找出n的所有約數,然後再在約數裡面找到差值最小對應的n,m。這樣步驟繁雜,又要先找約數,然後又要判斷最小值是哪兩個數的差。其實約數裡面是有對應的,比如 12的約數 1,2,3,4,6,12 其中1 12 3 4...

C語言實現動態陣列

include include 要使用malloc是要包含此標頭檔案 include 要使用memset是要包含此標頭檔案 intmain for i 0 i 列印陣列 free p 釋放記憶體,malloc和free一定要記得成組使用,不然會導致程式吃記憶體 getchar 讓程式停頓,觀察輸出 ...