其余各数按顺时针方向旋转前进,依次递增放置。例如,当N=4时,矩阵中的内
容如下:
1 |
2 |
3 |
4 |
12 |
13 |
14 |
5 |
11 |
16 |
15 |
6 |
10 |
9 |
8 |
7 |
#include <stdio.h>
#include <malloc.h>
/*
矩阵赋值
思想是:就是一圈一圈的赋值
*/
void evaluate(int **a, int dimension)
{
int start = 1;
int i = 0;
int j = 0;
int row = 0;
int column = dimension;
do
{
while (j < column)
{
a[i][j] = start++;
j++;
}
j--;
while (i < column-1)
{
i++;
a[i][j] = start++;
}
while (j > row)
{
j--;
a[i][j] = start++;
}
while (i > row+1)
{
i--;
a[i][j] = start++;
}
row++;
column--;
i = row;
j = row;
} while(start <= dimension*dimension);
printf("赋值完成。。。/n");
}
/*打印矩阵*/
void printfMatrix(int **a, int dimension)
{
int i,j;
printf("输出矩阵。。。/n");
for (i=0; i<dimension; ++i)
{
for (j=0; j<dimension; ++j)
{
printf("%d ",a[i][j]);
}
printf("/n");
}
}
int main(void)
{
/*输入矩阵的维数*/
printf("输入矩阵的维数:");
int i,j;
int dime = 0;
scanf("%d",&dime);
printf("%d/n",dime);
/*动态分配该矩阵*/
int **matrix;
matrix = (int**)malloc(sizeof(int*) * dime);
for (i=0; i<dime; ++i)
{
matrix[i] = (int*)malloc(sizeof(int) * dime);
}
/*给动态数组赋值*/
evaluate(matrix,dime);
/*打印数组*/
printfMatrix(matrix,dime);
/*动态释放该矩阵*/
for (j=0; j<dime; ++j)
{
free(matrix[j]);
}
free(matrix);
return 0;
}