</pre><p></p><p>前两天在线笔试时的一道题,生成一个N为的矩阵,形式如下</p><p>N=3</p><p> 1 2 3</p><p> 8 9 4</p><p> 7 6 5</p><p>当时用下面的方法去写 结果总是出错,也不能debug,最终没调出来。考完后重新调了一下 不过觉得应该有更好的算法才对,可是想不出来,请大家多多指教。</p>#include<stdio.h><pre name="code" class="cpp">void gen_matrix(int n){
int i, j, tmp, count, arr[n][n];
i = j = 0; tmp = 1;
count = 0;
while(tmp <= n * n){
while(j < n - count){ //向右生成矩阵元素
arr[i][j] = tmp;
tmp++;
j++;
}
j--; //回复j到边界位置
i++; //将i向下移动一未
while(i < n - count){ //向下生成矩阵元素
arr[i][j] = tmp;
tmp++;
i++;
}
i--; //恢复i到边界位置
j--; //将j向左移动一位
while(j >= count){ //向左生成矩阵元素
arr[i][j] = tmp;
tmp++;
j --;
}
j++; //恢复j到边界位置
i--; //将i向上移动一位
while(i > count){ //向上生成一位
arr[i][j] = tmp;
tmp++;
i--;
}
i++; //恢复i到边界位置
j++; //将j向右移动一位
count ++; //圈数+1
}
for(i = 0; i < n; i++){
for(j = 0; j < n; j++)
printf("%d ", arr[i][j]);
}
}
int main(void){
int n, i, j;
scanf("%d", &n);
gen_matrix(n);
return 0;
}
由外向内生成N*N矩阵
最新推荐文章于 2022-03-25 17:55:48 发布