求職過程遇到的一道面試題,當時沒有做出來,回來想出幾種方法,其中大多是「蠻力」解法,不得不陷入一堆的i、j 迴圈之中。最後想出一種遞迴解法,現記錄如下。
題目如下:
輸入n, 列印 n*n 螺旋矩陣
比如 n = 3,列印:
1 2 3
8 9 4
7 6 5
n = 4,列印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
遞迴解法如下:
+--------------------------> x 軸
| 1 2 3 4
| 12 13 14 5
| 11 16 15 6
| 10 9 8 7|y軸
設元素1的座標為(0,0),元素13的座標為(1,1),……,任一元素的座標為(x,y)
以下為完整**:
//功能:列印螺旋矩陣
//引數說明:matrix :螺旋矩陣 (x,y) :第乙個元素的座標
// start :第乙個元素的值 n :矩陣的大小
void setmatrix(int **matrix, int x, int y, int start, int n)
for (i = x; i < x + n-1; i++) /* 上部 */
matrix[y][i] = start++;
for (j = y; j < y + n-1; j++) /* 右邊 */
matrix[j][x+n-1] = start++;
for (i = x+n-1; i > x; i--) /* 底部 */
matrix[y+n-1][i] = start++;
for (j = y+n-1; j > y; j--) /* 左邊 */
matrix[j][x] = start++;
setmatrix(matrix, x+1, y+1, start, n-2); /* 遞迴 */ }
void main() }
執行結果, n = 15 時
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
56 57 58 59 60 61 62 63 64 65 66 67 68 69 16
55 104 105 106 107 108 109 110 111 112 113 114 115 70 17
54 103 144 145 146 147 148 149 150 151 152 153 116 71 18
53 102 143 176 177 178 179 180 181 182 183 154 117 72 19
52 101 142 175 200 201 202 203 204 205 184 155 118 73 20
51 100 141 174 199 216 217 218 219 206 185 156 119 74 21
50 99 140 173 198 215 224 225 220 207 186 157 120 75 22
49 98 139 172 197 214 223 222 221 208 187 158 121 76 23
48 97 138 171 196 213 212 211 210 209 188 159 122 77 24
47 96 137 170 195 194 193 192 191 190 189 160 123 78 25
46 95 136 169 168 167 166 165 164 163 162 161 124 79 26
45 94 135 134 133 132 131 130 129 128 127 126 125 80 27
44 93 92 91 90 89 88 87 86 85 84 83 82 81 28
43 42 41 40 39 38 37 36 35 34 33 32 31 30 29
修改**:
#include "stdio.h"
#include /*void setmatrix(int **matrix, int x, int y, int start, int n)
for (i = x; i < x + n-1; i++) //上部
matrix[y][i] = start++;
for (j = y; j < y + n-1; j++) // 右邊
matrix[j][x+n-1] = start++;
for (i = x+n-1; i > x; i--) // 底部
matrix[y+n-1][i] = start++;
for (j = y+n-1; j > y; j--) // 左邊
matrix[j][x] = start++;
setmatrix(matrix, x+1, y+1, start, n-2); // 遞迴
}*/ void setmatrix(int **a,int d, int n,int i)
for(int j=0+d;j0+d;l--)
a[n-1-d][l]=i++;
for(int m=n-1-d;m>=1+d;m--)
a[m][0+d]=i++;
setmatrix(a,d+1,n,i);
}void main()
}
列印螺旋矩陣(遞迴解法)
求職過程遇到的一道面試題,當時沒有做出來,回來想出幾種方法,其中大多是 蠻力 解法,不得不陷入一堆的i j 迴圈之中。最後想出一種遞迴解法,現記錄如下。題目如下 輸入 n,列印 n n 螺旋矩陣 比如 n 3 列印 1 2 3 8 9 4 7 6 5 n 4 列印 1 2 3 4 12 13 14 ...
螺旋矩陣 解法
void fun1 else if up right else int sum 0 將現在數值的外面每一層的數值都加起來 if n 2 0 for int k 0 k max level level k sum 8 max level k 4 else for int k 0 k max level...
列印螺旋矩陣
首先,看一下螺旋矩陣的樣子.如下圖 求螺旋陣列的 如下 dev cpp平台 include using namespace std int alloc mat int round 動態二維陣列的分配 void del mat int mat,int round 刪除動態分配的二維陣列 void pr...