今天,额,应该是昨天,面试官出了一道给矩阵环形赋值的题目,做下记录。
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int m,n;
printf("请输入矩阵大小:");
scanf("%i %i",&m,&n);
int **a = (int **)malloc(sizeof(int*)*m);
for (int i = 0; i < m; i++) {
a[i] = (int *)malloc(sizeof(int)*n);
}
//初始化
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = -1;
}
}
int i=0,j=0,number=1;
a[i][j] = number;
while (number<m*n) {
//向右
while (j+1<n && a[i][j+1]==-1) {
j++;
number++;
a[i][j] = number;
printf("向右:i = %i ,j = %i , number = %i\n",i,j,number);
}
//向下
while (i+1<m && a[i+1][j]==-1) {
i++;
number++;
a[i][j] = number;
printf("向下:i = %i ,j = %i , number = %i\n",i,j,number);
}
//向左
while (j-1>-1 && a[i][j-1]==-1) {
j--;
number++;
a[i][j] = number;
printf("向左:i = %i ,j = %i , number = %i\n",i,j,number);
}
//向上
while (i-1>-1 && a[i-1][j]==-1) {
i--;
number++;
a[i][j] = number;
printf("向上:i = %i ,j = %i , number = %i\n",i,j,number);
}
printf("一个循环结束(%i*%i):i = %i ,j = %i , number = %i\n",m,n,i,j,number);
}
printf("%i*%i 的循环矩阵如下:\n",m,n);
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
printf("%5i ",a[i][j]);
}
printf("\n");
}
printf("\n");
for (i = 0; i < m; i++) {
free(a[i]);
}
free(a);
return 0;
}