现在的位置: 首页 > 综合 > 正文

ChinaUnix第一届“C语言”开发大赛的第一题

2013年07月17日 ⁄ 综合 ⁄ 共 1097字 ⁄ 字号 评论关闭
给定一个整数N生成一个N*N的矩阵,矩阵中元素取值为1N21在左上角,

其余各数按顺时针方向旋转前进,依次递增放置。例如,当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;
}
 

抱歉!评论已关闭.